• Cfree clion windows c语言 socket 网络编程


    server.c

    #include <stdio.h>
    #include <winsock2.h>
    
    #define SERVER_PORT 5208 //侦听端口
    
    int main()
    {
        WORD wVersionRequested;
        WSADATA wsaData;
        int ret, nLeft, length;
        SOCKET sListen, sServer; //侦听套接字,连接套接字
        struct sockaddr_in saServer, saClient; //地址信息   
        char *ptr;//用于遍历信息的指针   
        //WinSock初始化
        wVersionRequested=MAKEWORD(2, 2); //希望使用的WinSock DLL 的版本
        ret=WSAStartup(wVersionRequested, &wsaData);
        if(ret!=0)
        {
            printf("WSAStartup() failed!
    ");
            return -1;
        }
        //创建Socket,使用TCP协议
        sListen=socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
        if (sListen == INVALID_SOCKET)
        {
            WSACleanup();
            printf("socket() faild!
    ");
            return -1;
        }
        //构建本地地址信息
        saServer.sin_family = AF_INET; //地址家族
        saServer.sin_port = htons(SERVER_PORT); //注意转化为网络字节序
        saServer.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //使用INADDR_ANY 指示任意地址
      
        //绑定
        ret = bind(sListen, (struct sockaddr *)&saServer, sizeof(saServer));
        if (ret == SOCKET_ERROR)
        {
            printf("bind() faild! code:%d
    ", WSAGetLastError());
            closesocket(sListen); //关闭套接字
            WSACleanup();
            return -1;
        }
      
        //侦听连接请求
        ret = listen(sListen, 5);
        if (ret == SOCKET_ERROR)
        {
            printf("listen() faild! code:%d
    ", WSAGetLastError());
            closesocket(sListen); //关闭套接字
            return -1;
        }
      
        printf("Waiting for client connecting!
    ");
        printf("Tips: Ctrl+c to quit!
    ");
        //阻塞等待接受客户端连接
     while(1)//循环监听客户端,永远不停止,所以,在本项目中,我们没有心跳包。
     {
      length = sizeof(saClient);
      sServer = accept(sListen, (struct sockaddr *)&saClient, &length);
      if (sServer == INVALID_SOCKET)
      {
       printf("accept() faild! code:%d
    ", WSAGetLastError());
       closesocket(sListen); //关闭套接字
       WSACleanup();
       return -1;
      }        
      char receiveMessage[5000];
       nLeft = sizeof(receiveMessage);
      ptr = (char *)&receiveMessage;
      while(nLeft>0)
      {
       //接收数据
       ret = recv(sServer, ptr, 5000, 0);
       if (ret == SOCKET_ERROR)
       {
        printf("recv() failed!
    ");
        return -1;
       }
       if (ret == 0) //客户端已经关闭连接
       {
        printf("Client has closed the connection
    ");
        break;
       }
       nLeft -= ret;
       ptr += ret;
      }  
        printf("receive message:%s
    ", receiveMessage);//打印我们接收到的消息。
     
     } 
      //  closesocket(sListen);
      //  closesocket(sServer);
      //  WSACleanup();
      return 0;
    }
    

    client.c

    #include <stdio.h>
    #include <stdlib.h>
    #include <winsock2.h>
    #define SERVER_PORT 5208 //侦听端口
    int main()
    {
       WORD wVersionRequested;
       WSADATA wsaData;
       int ret;
       SOCKET sClient; //连接套接字
       struct sockaddr_in saServer; //地址信息
       char *ptr;
       BOOL fSuccess = TRUE;
       //WinSock初始化
       wVersionRequested = MAKEWORD(2, 2); //希望使用的WinSock DLL的版本
       ret = WSAStartup(wVersionRequested, &wsaData);
       if(ret!=0)
       {
            printf("WSAStartup() failed!
    ");
            return -1;
       }
       //确认WinSock DLL支持版本2.2
       if(LOBYTE(wsaData.wVersion)!=2 || HIBYTE(wsaData.wVersion)!=2)
       {
            WSACleanup();
            printf("Invalid WinSock version!
    ");
            return -1;
       }
       //创建Socket,使用TCP协议
       sClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
       if (sClient == INVALID_SOCKET)
       {
            WSACleanup();
            printf("socket() failed!
    ");
            return -1;
       }
       //构建服务器地址信息
       saServer.sin_family = AF_INET; //地址家族
       saServer.sin_port = htons(SERVER_PORT); //注意转化为网络节序
       saServer.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
       //连接服务器
       ret = connect(sClient, (struct sockaddr *)&saServer, sizeof(saServer));
       if (ret == SOCKET_ERROR)
       {
            printf("connect() failed!
    ");
            closesocket(sClient); //关闭套接字
            WSACleanup();
            return -1;
       }
     
      
       char sendMessage[]="hello this is client message!"; 
       ret = send (sClient, (char *)&sendMessage, sizeof(sendMessage), 0);
       if (ret == SOCKET_ERROR)
       {
            printf("send() failed!
    ");
       }
       else
            printf("client info has been sent!");
       closesocket(sClient); //关闭套接字
       WSACleanup();
       return 0;
    }
    

    Cfree Clion的配置

    构建>构建选项>连接>参数

    -lws2_32

    clion的配置链接的库

     参考

    windows下用c实现Socket通信_Hope_新浪博客
    http://blog.sina.com.cn/s/blog_49f485700100mkjk.html

  • 相关阅读:
    docker---基本操作
    one_day_one_linuxCmd---netstat命令
    docker---Dockerfile编写
    one_day_one_linuxCmd---sz命令
    one_day_one_linuxCmd---scp命令
    同义英语词汇整理
    网络实习——校园网络设计方案
    实现 FTP 客户端和服务器程序所调用的系统函数
    2020年上半年总结
    单片机的串行总线拓展技术
  • 原文地址:https://www.cnblogs.com/startnow/p/7840664.html
Copyright © 2020-2023  润新知