zoukankan      html  css  js  c++  java
  • socket 笔记(一)

    #include "stdafx.h"
    #include "WINSOCK2.H"
    
    #pragma comment(lib,"WS2_32.lib")  
    #define BUF_SIZE 64  //缓冲区大小
    int _tmain(int argc, _TCHAR* argv[])
    {
        WSADATA wsd;//存储WSAStartup返回的数据windows socket数据。
        SOCKET  server;   //服务器套接字
        SOCKET  client;   //客户端套接字
        int retVal;
        char buf[BUF_SIZE];
    
        //初始化动态库套接字
        //WSAStartup      Winsock初始化
        ZeroMemory(buf, BUF_SIZE);
        if (WSAStartup(MAKEWORD(2, 2), &wsd) != 0)
        {
            printf("WSAStartup failed 1/n");
            return 1;
        }
    
        //创建套接字
        //AF_INET           IPV4套接字类型
        //AF_INET6          IPV6套接字类型
        //AF_UNIX           Unix套接字类型
        //SOCK_STREAM       TCP协议
        //SOCK_DGRAM        UDP协议
        //SOCK_RAW          特殊的IPV4,可以处理ICMP、IGMP等网络报文
        //INVALID_SOCKET    socket创建失败
        server = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (INVALID_SOCKET == server)
        {
            printf("socket failed !/n");
            WSACleanup();
            return -1;
        }
    
        //服务器套接地址
        //sin_family   协议簇
        //sin_addr     地址
        //htonl()--"Host to Network Long"
        //ntohl()--"Network to Host Long"
        //htons()--"Host to Network Short"
        //ntohs()--"Network to Host Short"
        //INADDR_ANY   inet_addr("0.0.0.0")监听所有网络
        //SOCKADDR_IN  SOCKADDR  网络地址
        SOCKADDR_IN addserver;
        addserver.sin_family = AF_INET;
        addserver.sin_port = htons(4999);
        addserver.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
        
            
        //绑定套接字
        retVal = bind(server, (const struct sockaddr*)&addserver, sizeof(SOCKADDR_IN));
            if (SOCKET_ERROR == retVal)
            {
                printf("bind failed !/n");
                closesocket(server);
                WSACleanup();
                return false;
            }
    
        //监听套接字
        retVal = listen(server, 1);
        if (SOCKET_ERROR == retVal)
        {
            printf("listen failed!/n");
            closesocket(server);
            WSACleanup();
            return false;
        }
    
    
        //接受客户端数据
        //accept  建立链接  返回一个SOCKET类型的值,表示接收到的套接字的描述符,否则返回INVALID_SOCKET _In_ SOCKET s,
        sockaddr_in addrClient;
        int addrClintlen = sizeof(addrClient);
        client = accept(server, (sockaddr FAR*)&addrClient, &addrClintlen);
        {
            printf("accept failed !/n");
            closesocket(server);
            WSACleanup();
            return -1;
        }
    
    
        //接收客户端套接字
        retVal = recv(client, buf, BUF_SIZE, 0);
        if (SOCKET_ERROR == retVal)
        {
            printf("recv failed !/n");
            closesocket(server);
            closesocket(client);
            WSACleanup();
            return false;
        }
    
        //退出程序
        printf("Recv From Client:%s/n", buf);
        retVal = send(client, "Hello Word!", strlen("Hello word!"), 0);
        if (SOCKET_ERROR == retVal)
        {
            printf("send failed !/n");
            closesocket(server);
            closesocket(client);
            WSACleanup();
            return false;
        }
        closesocket(server);
        closesocket(client);
        WSACleanup();
        return 0;
    }
  • 相关阅读:
    Version
    Windows Server Protocols (WSPP)
    Tomcat启动问题jvm访问拒绝的解决方法
    vue3中使用draggable插件实现元素的拖拽,排序,克隆
    消息队列的思考
    jenkins_ssh
    jenkins_构建配置
    minikube清理sh
    stream源码导读
    源码rabbit_3_消息链路追踪
  • 原文地址:https://www.cnblogs.com/ye-ming/p/8810930.html
Copyright © 2011-2022 走看看