• 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
    ",buf);
    		Sleep(1000);
    	}
    	closesocket(server);
    	return 0;
    
    }
    

     counter  记录了客户端的个数,listen的队列长度为 5。

    看截图:事实上可以更多我试过超过12的

  • 相关阅读:
    递归函数
    js原生代码添加表格(行,列用户选择)
    Vue列表数组检测及列表过滤
    字符,图片及视频存储
    小程序js-api简介及操作
    小程序开发-了解
    外购入库单审核可以,删除失败,提示采购单据严格按照数量控制,收料通知单关联数量不能大或负数
    PDO基础应用之异常处理
    进程池用法
    [转]解决Error: That port is already in use.
  • 原文地址:https://www.cnblogs.com/S-volcano/p/3302823.html
Copyright © 2020-2023  润新知