zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    C# 两个窗体中相互切换的方法
    Linq对DataTable数据的分组统计
    如何让窗体大小随着控件的大小变化而变化
    两张表解决用户自定义数据库之思路
    picturebox显示用字符串代表图片名称的(已导入资源的)图片
    如何将access高版本数据库保存为低版本的?
    Microsoft.Jet.OLEDB.4.0和Microsoft.ACE.OLEDB.12.0的区别
    条件编译解决AutoCAD多版本问题
    一个爬取股票信息的爬虫程序
    Python爬虫抓取东方财富网股票数据并实现MySQL数据库存储
  • 原文地址:https://www.cnblogs.com/startnow/p/7840664.html
Copyright © 2011-2022 走看看