一个服务器多个客户端的问题。

BlackRain007 2005-07-28 06:04:28
我编了一个TCP程序,当运行一个客户端的时候工作正确,如果同时再连入一个客户端就会出现发送数据出错的情况,我用的是最基本的方法,没有用什么重叠Io之类的,服务器端每次接收一个连接后就创建一个线程来和客户端通信,我的问题是最基本的方法能否处理服务器端一次连接多个客户端的情况?
各位大虾指点下.
...全文
125 点赞 收藏 7
写回复
7 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pp_hotel 2005-07-29
我的办法是在服务端将accept所得socket保存在一个socket *数组列表中
在一个独立线程中遍历该数组与客户端交互
回复
lishan2002 2005-07-29
应该可以的,可能有点复杂
不过,既然你想做服务器端连接多个客户端,为什么不采用一个简单IO模型呢!
回复
BlackRain007 2005-07-29
我的问题是:最基本的方法(不使用重叠IO等套接字IO模型)能否处理服务器端一次连接多个客户端的情况???如果能,有没有要注意的地方?

就这个问题没有大虾回答吗?
回复
UDX协议 2005-07-28
CSocket.
回复
BlackRain007 2005-07-28
我的问题是:最基本的方法(不使用重叠IO等套接字IO模型)能否处理服务器端一次连接多个客户端的情况???如果能,有没有要注意的地方?
服务器端部分代码:
int iport=DEFAULT_PORT;
HANDLE hThread;
DWORD dwThreadID;
int addrlenClient;
CTcpServerDlg* pthis=(CTcpServerDlg *)pParam;
//初始化 加载Winsock库
WSADATA wsad;
if(WSAStartup(MAKEWORD(2,2),&wsad)!=0){
AfxMessageBox("初始化winsock遇到错误");
return 0;
}
//绑定
pthis->sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(pthis->sServer==SOCKET_ERROR){
errmsg.Format("socket() failed: %s",ErrorMessage(WSAGetLastError()));
AfxMessageBox(errmsg);
return 0;
}
struct sockaddr_in addrLocal;
addrLocal.sin_family=AF_INET;
addrLocal.sin_port=htons(iport);
addrLocal.sin_addr.S_un.S_addr=htonl(INADDR_ANY);
if(bind(pthis->sServer,(SOCKADDR *)&addrLocal,sizeof(addrLocal))==SOCKET_ERROR){
errmsg.Format("bind() failed: %s",ErrorMessage(WSAGetLastError()));
AfxMessageBox(errmsg);
return 0;
}
//监听
listen(pthis->sServer,4);
// 接受连接
addrlenClient=sizeof(pthis->addrClient);
while (WaitForSingleObject(g_stop,0)!=WAIT_OBJECT_0) {
pthis->sClient=accept(pthis->sServer,(sockaddr *)(&(pthis->addrClient)),&addrlenClient);
if(pthis->sClient==INVALID_SOCKET){
errmsg.Format("accept() failed: %s",ErrorMessage(WSAGetLastError()));
AfxMessageBox(errmsg);
return 0;
}
hThread=CreateThread(NULL,0,ClientThread,(LPVOID)pthis,0,&dwThreadID);
创建完线程后,就在ClientThread线程中进行通信.
回复
nelsonc 2005-07-28
应该是你代码的问题。
回复
healer_kx 2005-07-28
没有看到你的代码,实在没有啥办法判断。
回复
发帖
网络编程
创建于2007-09-28

1.8w+

社区成员

VC/MFC 网络编程
申请成为版主
帖子事件
创建了帖子
2005-07-28 06:04
社区公告
暂无公告