socket通信

xiaoc10 2010-04-05 08:54:33
我想将客户端和服务器端写在同一个程序下:
客户端循环发送1,2,3,4,5,6,7到服务器端,服务器分别将他们显示出来。

出现的问题是:只显示了1,后面的2,3,4,5,6,7无法显示。

下面是我的代码:
char recvBuf[100];
void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested = MAKEWORD(1, 1);
err = WSAStartup(wVersionRequested, &wsaData);
if( err != 0 )
{
return;
}

if( LOBYTE( wsaData.wVersion ) != 1 ||
HIBYTE( wsaData.wVersion ) != 1 ) {
WSACleanup();
return;
}

HANDLE hThread1;
hThread1 = CreateThread(NULL, 0, Server, NULL, 0, NULL);
CloseHandle(hThread1);

SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

char sendBuf[100];
for(int i = 1; i <= 7; ++i)
{
sprintf(sendBuf, "[ %d ]", i);
send(sockClient, sendBuf, strlen(sendBuf) + 1, 0);
Sleep(100);
}

WSACleanup();

}

DWORD WINAPI Server(
LPVOID lpParameter
)
{

SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0);
SOCKADDR_IN addrSrv;
addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
addrSrv.sin_family = AF_INET;
addrSrv.sin_port = htons(6000);


bind(sockSrv, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));
listen(sockSrv, 5);

SOCKADDR_IN addrClient;
int len = sizeof(SOCKADDR);
while(1)
{
SOCKET sockConn = accept(sockSrv, (SOCKADDR*)&addrClient, &len);
recv(sockConn, recvBuf, 100, 0);
printf("%s\n", recvBuf);
recvBuf[0] = '\0';
Sleep(100);
closesocket(sockConn);
}
}
...全文
101 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhan882008 2011-11-17
  • 打赏
  • 举报
回复
貌似没有交互啊...
依旧Smile 2011-08-15
  • 打赏
  • 举报
回复
这个看不懂啊
sjdev 2010-04-05
  • 打赏
  • 举报
回复
把while里的closesocket去掉,把accept放到while之外,这样修改试试。
sjdev 2010-04-05
  • 打赏
  • 举报
回复
你的accept在while里面,每次连接都重置了。
xiaoc10 2010-04-05
  • 打赏
  • 举报
回复
这次,我将connect语句写在了循环中。
可是还是不工作。

如果将线程函数中的
//recvBuf[0] = '\0';
//Sleep(100);
这两句注释掉。
closesocket(sockConn);

结果打印很多个[1],但是数量又不是[7]个。
nostopstep 2010-04-05
  • 打赏
  • 举报
回复
你的程序的问题出现在客户端的Connect哪里。
connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR));

char sendBuf[100];
for(int i = 1; i <= 7; ++i)
{
sprintf(sendBuf, "[ %d ]", i);
send(sockClient, sendBuf, strlen(sendBuf) + 1, 0);
Sleep(100);
}
你先Connection了,然后去做循环,而服务端的While循环又把套接字关闭了,需要重新Connect。不Connect就不能再建立连接了。
xiaoc10 2010-04-05
  • 打赏
  • 举报
回复
即使去掉这行语句,closesocket(sockConn);
也不能工作啊。
sjdev 2010-04-05
  • 打赏
  • 举报
回复
你把closesocket(sockConn);这行代码方在while(1)里面是什么用处?

接收一次就关闭?

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧