CSocket实现多线程通信的问题

来源:百度知道 编辑:UC知道 时间:2024/06/13 18:08:27
在做网络课的试验,是一个多线程的web服务器。
我用CSocket类做好了单线程的情况,在改进为多线程时不知道为什么无法把文件传给浏览器了。代码基本没改,就是从原来的主程序中提出来成为一个线程函数,在监听用的Socket接受到连接请求时调用。
这是服务器端Socket的OnAccept函数
ServerSocket *pssocket[4];
SOCKET handle[4];
AfxMessageBox("客户连接");
if(threadnum<5)
{
pssocket[threadnum]=new ServerSocket();
if(Accept(*pssocket[threadnum]))
{

handle[threadnum]=pssocket[threadnum]->Detach();
pThread[threadnum]=AfxBeginThread(ThreadFunc,(LPVOID)handle[threadnum],THREAD_PRIORITY_NORMAL,0,0);
threadnum++;
}
}
==================================================================
这是线程函数
UINT _cdecl ThreadFunc(LPVOID Param)
{

CSocket threadsocket; //创建一个CSocket用于与客户通信
threadsocket.Attach((SOCKET)Param);
CSocketFile *ssocketfile=new CSocketFile(&threadsocket);
CArchive pout(ssocketfile,CArchive::store);
CString buffer="HTTP/1.1 200 OK\r\nServer:M

我以前写的多线程的服务器

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <netinet/in.h>
#include <ctype.h>
#include <pthread.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <sys/socket.h>

#define MAXLINE 4096

fd_set allset, readyset;
int client[FD_SETSIZE];
int maxfd, max_client;
pthread_mutex_t work[3] = {PTHREAD_MUTEX_INITIALIZER};

void *gaa( void *arg )
{
char buf[MAXLINE];
int len, j, fd = *((int * )arg);
if ( read( fd, buf, MAXLINE ) )
{
pthread_mutex_lock( &work[0] );
printf( "receive form clinet %s", buf );
pthread_mutex_unlock( &work[0] );
len = strlen( buf );
for( j = 0; j < len; j++ )
buf[j] = toupper( buf[j] );

write( fd, buf, len + 1 );
}
else
{
pthr