socket通信
我想将客户端和服务器端写在同一个程序下:
客户端循环发送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);
}
}