zoukankan      html  css  js  c++  java
  • windows下网络编程UDP

    转载

    C++ UDP客户端服务器Socket编程

    UDPServer.cpp

    #include<winsock2.h>
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #pragma comment(lib,"ws2_32.lib")
    #define BUFFER_SIZE 1024
    int main()
    {
      WSADATA WSAData;
      char receBuf[BUFFER_SIZE];
      char Response[] = "";
      if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
      {
        printf("初始化失败");
        exit(1);
      }
      SOCKET sockServer = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
      if (sockServer == INVALID_SOCKET)
      {
        printf("Failed socket() 
    ");
        return 0;
      }
      SOCKADDR_IN addr_Server; //服务器的地址等信息
      addr_Server.sin_family = AF_INET;
      addr_Server.sin_port = htons(4567);
      addr_Server.sin_addr.S_un.S_addr = INADDR_ANY;
      if (bind(sockServer, (SOCKADDR*)&addr_Server, sizeof(addr_Server)) == SOCKET_ERROR)
      {
        //服务器与本地地址绑定
        printf("Failed socket() %d 
    ", WSAGetLastError());
        return 0;
      }
      SOCKADDR_IN addr_Clt;
      int fromlen = sizeof(SOCKADDR);
      while (true)
      {
        int last = recvfrom(sockServer, receBuf, 1024, 0, (SOCKADDR*)&addr_Clt, &fromlen);
        if (last>0)
        { 
          //判断接收到的数据是否为空
          receBuf[last] = '';//给字符数组加一个'',表示结束了。不然输出有乱码
          if (strcmp(receBuf, "bye") == 0)
          {
            cout << " 客户端不跟我聊天了..." << endl;
            closesocket(sockServer);
            return 0;
          }
          else
          {
            printf("接收到数据(%s):%s
    ", inet_ntoa(addr_Clt.sin_addr), receBuf);
          }
        }
        cout << "回复客户端消息:";
        cin >> Response; //给客户端回复消息
        sendto(sockServer, Response, strlen(Response), 0, (SOCKADDR*)&addr_Clt, sizeof(SOCKADDR));
      }
      closesocket(sockServer);
      WSACleanup();
      return 0;
    }

    UDPClient.cpp

     #include<winsock2.h>
    #include<stdio.h>
    #include<string.h>
    #include<iostream>
    using namespace std;
    #pragma comment(lib,"ws2_32.lib")
    # define BUFFER_SIZE 1024 //缓冲区大小
    int main()
    {
      SOCKET sock_Client; //客户端用于通信的Socket
      WSADATA WSAData;
      char receBuf[BUFFER_SIZE]; //发送数据的缓冲区
      char sendBuf[BUFFER_SIZE]; //接受数据的缓冲区
      if (WSAStartup(MAKEWORD(2, 2), &WSAData) != 0)
      {
        printf("初始化失败!");
        return -1;
      } 
       //初始化
      sock_Client = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);//创建客户端用于通信的Socket
      SOCKADDR_IN addr_server; //服务器的地址数据结构
      addr_server.sin_family = AF_INET;
      addr_server.sin_port = htons(4567);//端口号为4567
      addr_server.sin_addr.S_un.S_addr = inet_addr("127.0.0.1"); //127.0.0.1为本电脑IP地址
      SOCKADDR_IN sock;
      int len = sizeof(sock);
      while (true)
      {
        cout << "请输入要传送的数据:";
        cin >> sendBuf;
        sendto(sock_Client, sendBuf, strlen(sendBuf), 0, (SOCKADDR*)&addr_server, sizeof(SOCKADDR));
        //int last=recv(sock_Client, receBuf, strlen(receBuf), 0); // (调用recv和recvfrom都可以)
        int last = recvfrom(sock_Client, receBuf, strlen(receBuf), 0, (SOCKADDR*)&sock, &len);
        if (last>0)
        {
          receBuf[last] = ''; //给字符数组加一个'',表示结束了。不然输出有乱码
          if (strcmp(receBuf, "bye") == 0)
          {
            cout << "服务器不跟我聊天了..." << endl;//当服务器发来bye时,关闭socket
            closesocket(sock_Client);
            break;
          }
          else
          {
            printf("接收到数据:%s
    ", receBuf);
          }
        }
      }
      closesocket(sock_Client);
      WSACleanup();
    
      return 0;
    }
    111
  • 相关阅读:
    JS流程控制语句
    JS操作符
    JS数据类型
    JS基础语法与JS变量
    CSS案例1(导航栏)
    CSS三大特性
    CSS——背景,渐变和列表
    HTML+CSS项目——模拟京东网页
    JavaScript简介
    js -04课程 更换背景图片
  • 原文地址:https://www.cnblogs.com/zwj-199306231519/p/9067618.html
Copyright © 2011-2022 走看看