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;
    
    }


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

  • 相关阅读:
    分享25个高质量的移动设备wordpress主题(Mobile theme)
    一个强大专业的响应式jQuery幻灯效果插件:Royal Slider
    超过30个超棒的漂亮iphone 4s墙纸
    帮助你自动生成已经过去的时间的jQuery插件 Smart Time Ago
    分享20个响应式web设计的必备jQuery插件
    2012年度最新免费web开发设计资源荟萃
    myEclipse 下载
    extjs 配置与表格使用
    mysql 4.0.26 安装流程
    spring+ehcache 实现原理
  • 原文地址:https://www.cnblogs.com/zfyouxi/p/4798983.html
Copyright © 2011-2022 走看看