• c++ socket


    //server
    #include <stdio.h>  
    #include <winsock2.h>  
      
    #pragma comment(lib,"ws2_32.lib")  
      
    int main(int argc, char* argv[])  
    {  
        //初始化WSA  
        WORD sockVersion = MAKEWORD(2,2);  
        WSADATA wsaData;  
        if(WSAStartup(sockVersion, &wsaData)!=0)  
        {  
            return 0;  
        }  
      
        //创建套接字  
        SOCKET slisten = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);  
        if(slisten == INVALID_SOCKET)  
        {  
            printf("socket error !");  
            return 0;  
        }  
      
        //绑定IP和端口  
        sockaddr_in sin;  
        sin.sin_family = AF_INET;  
        sin.sin_port = htons(8888);  
        sin.sin_addr.S_un.S_addr = INADDR_ANY;   
        if(bind(slisten, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)  
        {  
            printf("bind error !");  
        }  
      
        //开始监听  
        if(listen(slisten, 5) == SOCKET_ERROR)  
        {  
            printf("listen error !");  
            return 0;  
        }  
      
        //循环接收数据  
        SOCKET sClient;  
        sockaddr_in remoteAddr;  
        int nAddrlen = sizeof(remoteAddr);  
        char revData[255];   
        while (true)  
        {  
            printf("等待连接...
    ");  
            sClient = accept(slisten, (SOCKADDR *)&remoteAddr, &nAddrlen);  
            if(sClient == INVALID_SOCKET)  
            {  
                printf("accept error !");  
                continue;  
            }  
            printf("接受到一个连接:%s 
    ", inet_ntoa(remoteAddr.sin_addr));  
              
            //接收数据  
            int ret = recv(sClient, revData, 255, 0);         
            if(ret > 0)  
            {  
                revData[ret] = 0x00;  
                printf(revData);  
            }  
      
            //发送数据  
            const char * sendData = "你好,TCP客户端!
    ";  
            send(sClient, sendData, strlen(sendData), 0);  
            closesocket(sClient);  
        }  
          
        closesocket(slisten);  
        WSACleanup();  
        return 0;  
    }
     
    
    
    //client
    
    #include<WINSOCK2.H>
    #include<STDIO.H>
    #include<iostream>
    #include<cstring>
    #include <string>
    using namespace std;
    #pragma comment(lib, "ws2_32.lib")
     
    int main()
    {
        WORD sockVersion = MAKEWORD(2, 2);
        WSADATA data;
        if(WSAStartup(sockVersion, &data)!=0)
        {
            return 0;
        }
        while(true){
            SOCKET sclient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
            if(sclient == INVALID_SOCKET)
            {
                printf("invalid socket!");
                return 0;
            }
            
            sockaddr_in serAddr;
            serAddr.sin_family = AF_INET;
            serAddr.sin_port = htons(8888);
            serAddr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
            if(connect(sclient, (sockaddr *)&serAddr, sizeof(serAddr)) == SOCKET_ERROR)
            {  //连接失败 
                printf("connect error !");
                closesocket(sclient);
                return 0;
            }
            
            string data;
            cin>>data;
            const char * sendData;
            sendData = data.c_str();   //string转const char* 
            //char * sendData = "你好,TCP服务端,我是客户端
    ";
            send(sclient, sendData, strlen(sendData), 0);
            //send()用来将数据由指定的socket传给对方主机
            //int send(int s, const void * msg, int len, unsigned int flags)
            //s为已建立好连接的socket,msg指向数据内容,len则为数据长度,参数flags一般设0
            //成功则返回实际传送出去的字符数,失败返回-1,错误原因存于error 
            
            char recData[255];
            int ret = recv(sclient, recData, 255, 0);
            if(ret>0){
                recData[ret] = 0x00;
                printf(recData);
            } 
            closesocket(sclient);
        }
        
        
        WSACleanup();
        return 0;
        
    }
     
    书搞进脑袋 创新 创造; 积极
  • 相关阅读:
    PyCharm设置Python版本,你肯定不知道!
    Python学习笔记之二——Python的运行机制,一般人肯定不会
    Django开发登录功能实战
    Python基础语法总结【新手必学】
    Python爬虫实现抓取腾讯视频所有电影【实战必学】
    委托和事件:要注意的事项
    asp.net网页防刷新重复提交、防后退解决办法!
    重新复习基础使用的网上资料
    JS和CS互访【后台前台代码调用JavaScript变量以及JavaScript调用代码变量】
    重新学习基础:草稿3(2)【后续】
  • 原文地址:https://www.cnblogs.com/tobetterlife/p/12171029.html
Copyright © 2020-2023  润新知