zoukankan      html  css  js  c++  java
  • Socket通信-服务端

    WSADATA wsd;
    SOCKET sClient;
    SOCKET sServer;
    SOCKADDR_IN addrServ;
    char chRcvBuf[RECV_BUF_SIZE];

    	if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
    	{
    		Sleep(5000);
    		continue;
    	}
    	sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (INVALID_SOCKET == sServer)
    	{
    		WSACleanup();
    		Sleep(5000);
    		continue;
    	}
    
    	addrServ.sin_family = AF_INET;
    	addrServ.sin_port = htons(4999);
    	addrServ.sin_addr.s_addr = INADDR_ANY;
    	int nretVal = bind(sServer, (LPSOCKADDR)&addrServ, sizeof(SOCKADDR_IN));
    	if (SOCKET_ERROR == nretVal)
    	{
    		closesocket(sServer);
    		WSACleanup();
    		Sleep(5000);
    		continue;
    	}
    
    	nretVal = listen(sServer, 1);
    	if (SOCKET_ERROR == nretVal)
    	{
    		closesocket(sServer);
    		WSACleanup();
    		Sleep(5000);
    		continue;
    	}
    
    	sockaddr_in addrClient;
    	int addrClientlen = sizeof(addrClient);
    	sClient = accept(sServer, (sockaddr FAR*)&addrClient, &addrClientlen);
    	if (INVALID_SOCKET == sClient)
    	{
    		closesocket(sServer);
    		WSACleanup();
    		Sleep(5000);
    		continue;
    	}
    
    	ZeroMemory(chRcvBuf, RECV_BUF_SIZE);
    	nretVal = recv(sClient, chRcvBuf, RECV_BUF_SIZE, 0);
    	if (SOCKET_ERROR == nretVal)
    	{
    		closesocket(sServer);
    		closesocket(sClient);
    		WSACleanup();
    		Sleep(5000);
    		continue;
    	}
    
    	if (strlen(chRcvBuf) > 0 && strlen(chRcvBuf) < RECV_BUF_SIZE)
    		ParseCmd(chRcvBuf);
    
    	closesocket(sServer);
    	closesocket(sClient);
    	WSACleanup();
  • 相关阅读:
    Golang 函数
    Golang type
    Golang 分支控制和循环
    Golang 字符型
    Golang运算符
    final 和 static 的区别
    Golang标识符命名规则
    Golang值类型与引用类型
    Golang指针
    启动 jvm 参数小总结
  • 原文地址:https://www.cnblogs.com/Mojito2020/p/13713029.html
Copyright © 2011-2022 走看看