这么写可以实现服务端多线程么
这样写可以实现服务端多线程么?
ImageSock是成员变量,在子线程里面,我又创建了一个SOCKET=ImageSock,使用新创建的发送数据。
但是启动第二个客户端的时候,收不到数据,这段程序又问题么?
------解决方案--------------------
看你的例子很简单,不需要多线程吧,用select或WSAAsynSelect都可以,拿这的socket例子参考一下:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
建议 线程不要和对话框耦合太大 否则很难修改啊
------解决方案--------------------
想想就知道了
多个客户端用同一个dlg->ImageSock会有什么问题?
就是只能保存最后一个连接上来的客户端
可以改成
或者用数组和链表来保存客户端socket
------解决方案--------------------
这种使用多线程的方式问题不大,但是如楼上所说,代码中有些问题要再斟酌。
UINT SendDataThread(LPVOID lpParam)
{
CVSMNETDlg* dlg=(CVSMNETDlg*)lpParam;
SOCKET sock;
struct sockaddr_in servaddr;
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(4040);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
struct sockaddr_in clientaddr;
int lenth=sizeof(clientaddr);
int result;
sock=socket(AF_INET,SOCK_STREAM,0);
result = bind(sock, (struct sockaddr *) &servaddr, sizeof(servaddr));
if (result == SOCKET_ERROR) /* 绑定失败 */
{
closesocket(sock);
AfxMessageBox("绑定失败");
}
result = listen(sock, SOMAXCONN);
while(1)
{
dlg->ImageSock=accept(sock,(struct sockaddr*)&clientaddr,&lenth);
AfxBeginThread(SendData,dlg);
}
closesocket(sock);
return 0;
}
ImageSock是成员变量,在子线程里面,我又创建了一个SOCKET=ImageSock,使用新创建的发送数据。
但是启动第二个客户端的时候,收不到数据,这段程序又问题么?
------解决方案--------------------
看你的例子很简单,不需要多线程吧,用select或WSAAsynSelect都可以,拿这的socket例子参考一下:
http://download.****.net/detail/geoff08zhang/4571358
------解决方案--------------------
建议 线程不要和对话框耦合太大 否则很难修改啊
------解决方案--------------------
想想就知道了
多个客户端用同一个dlg->ImageSock会有什么问题?
就是只能保存最后一个连接上来的客户端
可以改成
while(1)
{
SOCKET ImageSock=accept(sock,(struct sockaddr*)&clientaddr,&lenth);
AfxBeginThread(SendData,ImageSock);
}
或者用数组和链表来保存客户端socket
------解决方案--------------------
这种使用多线程的方式问题不大,但是如楼上所说,代码中有些问题要再斟酌。