zoukankan      html  css  js  c++  java
  • 【Socket规划】套接字Windows台C语言

    【编译环境】:Visual Studio 2013

    这是服务端实现流程。

    #include<stdio.h>
    #include<stdlib.h>
    #include<winsock2.h>
    
    #pragma comment(lib, "ws2_32.lib")
    
    const int BACK_LOG = 5;
    
    int main(int argc, char * argv[])
    {
    	//初始化套接字
    	WSADATA wsaData;
    	int ret = WSAStartup(MAKEWORD(2, 4), &wsaData);
    	if (0 != ret){
    		fputs("WSAStartup error
    ", stderr);
    		return 1;
    	}
    
    	//创建套接字
    	SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    	if (INVALID_SOCKET == sock) {
    		fputs("socket() error
    ", stderr);
    		WSACleanup();
    		return 1;
    	}
    
    	//绑定套接字
    	SOCKADDR_IN sockAddr;
    	memset(&sockAddr,0,sizeof(SOCKADDR_IN));
    	sockAddr.sin_family = AF_INET;//协议簇,一般用AF_INET表示TCP/IP协议
    	sockAddr.sin_addr.S_un.S_addr = htonl(ADDR_ANY);//表示IP地址
    	sockAddr.sin_port = htons(7);//表示端口
    
    	ret = bind(sock, (SOCKADDR*)&sockAddr, sizeof(sockAddr));
    	if (SOCKET_ERROR == ret) {
    		fputs("bind() error
    ", stderr);
    		closesocket(sock);
    		WSACleanup();
    		return 1;
    	}
    
    	//侦听套接字
    	ret = listen(sock, BACK_LOG);
    	if (SOCKET_ERROR == ret) {
    		fputs("listen() error
    ", stderr);
    		closesocket(sock);
    		WSACleanup();
    		return 1;
    	}
    
    	//接收套接字
    	SOCKADDR_IN clientAddr;
    	int szClientAddr = sizeof(clientAddr);
    
    	SOCKET clientSock = accept(sock, (SOCKADDR*)&clientAddr, &szClientAddr);
    
    	if (INVALID_SOCKET == clientSock){
    		fputs("accept() error
    ", stderr);
    		closesocket(sock);
    		WSACleanup();
    		return 1;
    	}
    
    	//收发数据
    	TCHAR buff[256];
    	memset(&buff,0,sizeof(buff));
    
    	recv(sock,buff,sizeof(buff),0);//recv()返回读入的字节数
    
    	TCHAR buff2[] = "QUIT
    ";
    	send(sock, buff2, sizeof(buff2), 0);//成功则返回实际传送出去的字符数
    
    	//回收资源
    	closesocket(sock);
    	closesocket(clientSock);
    	WSACleanup();
    	
    	return 0;
    
    }


    版权声明:本文博主原创文章,博客,未经同意不得转载。

  • 相关阅读:
    几种常用的曲线
    0188. Best Time to Buy and Sell Stock IV (H)
    0074. Search a 2D Matrix (M)
    0189. Rotate Array (E)
    0148. Sort List (M)
    0859. Buddy Strings (E)
    0316. Remove Duplicate Letters (M)
    0452. Minimum Number of Arrows to Burst Balloons (M)
    0449. Serialize and Deserialize BST (M)
    0704. Binary Search (E)
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4798983.html
Copyright © 2011-2022 走看看