SERVER端:
HANDLE h_gThread;
WSADATA wsa;
WORD wsa_res = WSAStartup(0x0101,&wsa);
int res = WSAStartup(wsa_res,&wsa);
struct sockaddr_in socket_local,socket_remote;
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen == INVALID_SOCKET) return 0;
socket_local.sin_family = AF_INET;
socket_local.sin_port = htons(8080);
socket_local.sin_addr.S_un.S_addr = INADDR_ANY;
int bind_res = bind(sListen,(struct sockaddr*)&socket_local,sizeof(socket_local));
if(bind_res == SOCKET_ERROR) return 0;
if(listen(sListen,SOMAXCONN) == SOCKET_ERROR) return 0;
int addrlen = sizeof(socket_remote);
while(true == bl_startup)
{
sClient = accept(sListen,(struct sockaddr*)&socket_remote,&addrlen);
if(sClient == INVALID_SOCKET) continue;
skt_remote[sClient]=socket_remote;
h_gThread=CreateThread(NULL,0,begin_thread,(LPVOID)&sClient,0,NULL);
CloseHandle(h_gThread);
}DWORD WINAPI CMcrtDlg::begin_thread(LPVOID lpPara)
{ int rec;
SOCKET sClient = *((SOCKET*)lpPara);
char buff[500];
rec=SOCKET_ERROR;
while (rec==SOCKET_ERROR)
{
rec = recv(sClient,buff,sizeof(buff),0);
}
send(sClient, buff, sizeof(buff), 0);
::closesocket(sClient);
}CLIENT端:
SOCKET s;
WSADATA wsa;
WORD wsa_res = WSAStartup(0x0101,&wsa);
int res = WSAStartup(wsa_res,&wsa);
if(res == -1)return "0";
struct sockaddr_in socket_in;
s = socket(AF_INET,SOCK_STREAM,0);
if(s == INVALID_SOCKET) return "1";
socket_in.sin_family = AF_INET;
socket_in.sin_port = htons(8080);
socket_in.sin_addr.S_un.S_addr = inet_addr(cs_serip);
int con_res = connect(s,(struct sockaddr*)&socket_in,sizeof(socket_in));
if(con_res == SOCKET_ERROR)
{closesocket(s);
WSACleanup();
}
else
{
::send(s, sztextall, strlen(sztextall), 0) ;
int nRecv = ::recv(s, buff, 256, 0);
if(nRecv > 0)
{buff[nRecv] = '\0';
closesocket(s);
WSACleanup();
return buff;
}
else
{
closesocket(s);
WSACleanup();
return "1031";
}
}
}
问题1:用三台机子,一台做server,二台做client,client端for 1000次向server不停的发送信息,这时,没问题(我测试的结果)
如果用四台机子,一台做server,三台做client,client端for 1000次向server不停的发送信息,这时,可有一台或两台机子在for了几次或几十次或几百次时就得到不server端的回应了,求原因及解决方法
HANDLE h_gThread;
WSADATA wsa;
WORD wsa_res = WSAStartup(0x0101,&wsa);
int res = WSAStartup(wsa_res,&wsa);
struct sockaddr_in socket_local,socket_remote;
sListen = socket(AF_INET,SOCK_STREAM,0);
if(sListen == INVALID_SOCKET) return 0;
socket_local.sin_family = AF_INET;
socket_local.sin_port = htons(8080);
socket_local.sin_addr.S_un.S_addr = INADDR_ANY;
int bind_res = bind(sListen,(struct sockaddr*)&socket_local,sizeof(socket_local));
if(bind_res == SOCKET_ERROR) return 0;
if(listen(sListen,SOMAXCONN) == SOCKET_ERROR) return 0;
int addrlen = sizeof(socket_remote);
while(true == bl_startup)
{
sClient = accept(sListen,(struct sockaddr*)&socket_remote,&addrlen);
if(sClient == INVALID_SOCKET) continue;
skt_remote[sClient]=socket_remote;
h_gThread=CreateThread(NULL,0,begin_thread,(LPVOID)&sClient,0,NULL);
CloseHandle(h_gThread);
}DWORD WINAPI CMcrtDlg::begin_thread(LPVOID lpPara)
{ int rec;
SOCKET sClient = *((SOCKET*)lpPara);
char buff[500];
rec=SOCKET_ERROR;
while (rec==SOCKET_ERROR)
{
rec = recv(sClient,buff,sizeof(buff),0);
}
send(sClient, buff, sizeof(buff), 0);
::closesocket(sClient);
}CLIENT端:
SOCKET s;
WSADATA wsa;
WORD wsa_res = WSAStartup(0x0101,&wsa);
int res = WSAStartup(wsa_res,&wsa);
if(res == -1)return "0";
struct sockaddr_in socket_in;
s = socket(AF_INET,SOCK_STREAM,0);
if(s == INVALID_SOCKET) return "1";
socket_in.sin_family = AF_INET;
socket_in.sin_port = htons(8080);
socket_in.sin_addr.S_un.S_addr = inet_addr(cs_serip);
int con_res = connect(s,(struct sockaddr*)&socket_in,sizeof(socket_in));
if(con_res == SOCKET_ERROR)
{closesocket(s);
WSACleanup();
}
else
{
::send(s, sztextall, strlen(sztextall), 0) ;
int nRecv = ::recv(s, buff, 256, 0);
if(nRecv > 0)
{buff[nRecv] = '\0';
closesocket(s);
WSACleanup();
return buff;
}
else
{
closesocket(s);
WSACleanup();
return "1031";
}
}
}
问题1:用三台机子,一台做server,二台做client,client端for 1000次向server不停的发送信息,这时,没问题(我测试的结果)
如果用四台机子,一台做server,三台做client,client端for 1000次向server不停的发送信息,这时,可有一台或两台机子在for了几次或几十次或几百次时就得到不server端的回应了,求原因及解决方法
解决方案 »
- 窗口重绘
- 50分求一个把1位int类型的数字赋值给一个char指针中某一位的方法
- 求一个ANSI字符的不管大小写最快的检索函数
- 画图程序中,如何实现橡皮筋效果????
- 后台capFileSaveDIB捕获图像的一个问题
- 如何对CList,CMap等进行排序?如果不可以,又怎样在VC的工程中使用STL?
- VC中如何确定列表控件里哪一项被选中?
- 一个简单的问题,请各位大侠帮帮忙啊!
- 数据强制类型转换与操作系统有关吗?(在线等候)
- fopen打不开文件
- 怎么通过VS2008中的VC来操作EXCEL2003或是EXCEL2007?
- 向文件(TXT或CSV)写入字符串,怎样可以把新插入的放最前面,把原来的往后移?
{
rec = recv(sClient,buff,sizeof(buff),0);
}
send(sClient, buff, sizeof(buff), 0);
第一次成功接收后,返回值等于接收的字节数!=SOCKET_ERROR;
即:循环一次后,服务器发送一次,然后退出;楼主结贴吧;你发了这么多相同的;