win8 下面 listen 的队列长度貌似无效了 上c/s 代码 并附截图,有图有真相
#include <WinSock2.h>
#include <stdio.h>
#include <windows.h>
DWORD ServerRoutine(LPVOID lpParam);
#pragma comment(lib,"Ws2_32.lib")
#define IP "127.0.0.1"
#define PORT 3333
static int counter = 1;
int main()
{
//declare varible
WSADATA ws;
SOCKET local,acceptSocket;
sockaddr_in localAddr;
unsigned int unAddrLen = sizeof(localAddr);
int nRet;
///init
WSAStartup(MAKEWORD(2,2),&ws);
local = socket(AF_INET,SOCK_STREAM,0);
if(local == INVALID_SOCKET)
{
return -1;
}
localAddr.sin_addr.s_addr = inet_addr(IP);
localAddr.sin_family = AF_INET;
localAddr.sin_port = htons(PORT);
memset(localAddr.sin_zero,0,sizeof(localAddr.sin_zero));
nRet = bind(local,(sockaddr *)&localAddr,unAddrLen);
if(nRet)
{
return -2;
}
listen(local,5);
while(1)
{
acceptSocket = accept(local,(sockaddr *)&localAddr,(int *)&unAddrLen);
if(acceptSocket != INVALID_SOCKET)
{
CreateThread(NULL,0,(LPTHREAD_START_ROUTINE )ServerRoutine,&acceptSocket,0,NULL);
}
}
if(local)
{
closesocket(local);
}
if(acceptSocket)
{
closesocket(acceptSocket);
}
return 0;
}
DWORD ServerRoutine(LPVOID lpParam)
{
counter ++;
SOCKET s =* (SOCKET *)(lpParam);
int nRet ;
char num[10] = "";
char buf[1024]="hello world! coming from server!";
itoa(counter,num,10);
strcat(buf,num);
while(1)
{
nRet = send(s,buf,strlen(buf)+1,0);
Sleep(500);
}
return 0;
}
client 代码:
#include <WinSock2.h>
#include <stdio.h>
#include <windows.h>
#pragma comment(lib,"Ws2_32.lib")
#define IP "127.0.0.1"
#define PORT 3333
int main()
{
//declare varible
WSADATA ws;
SOCKET server;
sockaddr_in serverAddr;
unsigned int unAddrLen = sizeof(serverAddr);
int nRet;
///init
WSAStartup(MAKEWORD(2,2),&ws);
server = socket(AF_INET,SOCK_STREAM,0);
if(server == INVALID_SOCKET)
{
return -1;
}
serverAddr.sin_addr.s_addr = inet_addr(IP);
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
memset(serverAddr.sin_zero,0,sizeof(serverAddr.sin_zero));
//nRet = bind(server,(sockaddr *)&serverAddr,unAddrLen);
//int n = WSAGetLastError();
//if(nRet)
//{
// return -2;
//}
nRet = connect(server,(sockaddr *)&serverAddr,int(unAddrLen));
if(nRet)
{
return -3;
}
char buf[1024]="";
while(1)
{
memset(buf,0,1024);
nRet = recv(server,buf,sizeof(buf),0);
printf("%s\n",buf);
Sleep(1000);
}
closesocket(server);
return 0;
}
counter 记录了客户端的个数,listen的队列长度为 5。
看截图:事实上可以更多我试过超过12的

浙公网安备 33010602011771号