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的

 

 

posted @ 2013-09-05 10:59  svolcano  阅读(281)  评论(0编辑  收藏  举报