zoukankan      html  css  js  c++  java
  • 96.udp通信

    运行截图

    客户端

    • 创建客户端套接字,用于创建UDP通信
      1 SOCKET socket_client;
    • 创建UDP通信
      1 socket_client = socket(AF_INET, SOCK_DGRAM, 0);
    • 创建客户端结构体保存ip地址以及端口号
      1 SOCKADDR_IN sever;
    • 设置通信模式,通信地址以及通信端口
      1     //设置通信模式
      2     sever.sin_family = AF_INET;
      3     //设置通信地址
      4     sever.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
      5     //开启通信端口
      6     sever.sin_port = htons(8848);
    • 创建字符串用于发送信息
      1     //存储获取的字符串
      2     char strreceive[1024] = { 0 };
      3     //获取的字符串长度
      4     int length;
    • 获取字符串并通过套接字发送到相应的ip地址
      1 //不断进行数据交换
      2     while (1)
      3     {
      4         char str[1024] = { 0 };
      5         fgets(str, 1024, stdin);
      6         //通过套接字发送信息到服务器
      7         sendto(socket_client, str, strlen(str) + 1, 0, &sever, sizeof(SOCKADDR));
      8     }
    • 套接字检测版本信息
       1 //UDP版本,2,2版本
       2     WORD wversion=MAKEWORD(2,2);
       3     //当前版本
       4     WSADATA wsadata;
       5     //获取版本对比,开始通信
       6     int error = WSAStartup(wversion, &wsadata);
       7 
       8     //如果版本与指定的不对则返回
       9     if (error!=0)
      10     {
      11         printf("error");
      12         return;
      13     }
      14 
      15     //取出低八位与高八位进行版本对比
      16     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
      17     {
      18         printf(" version  error");
      19         return;
      20     }
    • 关闭套接字
      1     //关闭
      2     closesocket(socket_client);
      3     //关闭
      4     WSACleanup();

    客户端完整代码

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 //网络通信
     6 #include<winsock.h>
     7 #pragma  comment(lib,"ws2_32.lib")
     8 
     9 void main()
    10 {
    11     //存储获取的字符串
    12     char strreceive[1024] = { 0 };
    13     //获取的字符串长度
    14     int length;
    15     //客户端的套接字,用于创建UDP通信
    16     SOCKET socket_client;
    17     //创建客户端结构体保存ip地址以及端口号
    18     SOCKADDR_IN sever;
    19     SOCKADDR_IN severTmp;
    20 
    21     //UDP版本,2,2版本
    22     WORD wversion=MAKEWORD(2,2);
    23     //当前版本
    24     WSADATA wsadata;
    25     //获取版本对比,开始通信
    26     int error = WSAStartup(wversion, &wsadata);
    27 
    28     //如果版本与指定的不对则返回
    29     if (error!=0)
    30     {
    31         printf("error");
    32         return;
    33     }
    34 
    35     //取出低八位与高八位进行版本对比
    36     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
    37     {
    38         printf(" version  error");
    39         return;
    40     }
    41     //创建UDP通信
    42     socket_client = socket(AF_INET, SOCK_DGRAM, 0);
    43 
    44     //设置通信模式
    45     sever.sin_family = AF_INET;
    46     //设置通信地址
    47     sever.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
    48     //开启通信端口
    49     sever.sin_port = htons(8848);
    50 
    51     
    52     //打开文件
    53     FILE *pfr = fopen("1.txt", "rb");
    54     //不断进行数据交换
    55     while (1)
    56     {
    57         char str[1024] = { 0 };
    58         fgets(str, 1024, stdin);
    59         //通过套接字发送信息到服务器
    60         sendto(socket_client, str, strlen(str) + 1, 0, &sever, sizeof(SOCKADDR));
    61 
    62     }
    63 
    64     //关闭
    65     closesocket(socket_client);
    66     //关闭
    67     WSACleanup();
    68 
    69     system("pause");
    70 }

    服务器端

    • 创建服务器端套接字,用于创建UDP通信
      1 //服务器套接字,创建UDP通信
      2     SOCKET socket_send;
    • 创建UDP通信
      1 socket_send = socket(AF_INET, SOCK_DGRAM, 0);
    • 创建服务器端结构体保存ip地址以及端口号
      1 SOCKADDR_IN server;
    • 设置通信模式,通信地址以及通信端口
      1 //设置通信方式
      2     server.sin_family = AF_INET;
      3     //获取本地ip信息
      4     server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
      5     server.sin_port = htons(8848);//端口
    • 把服务器的ip信息和端口信息与服务器套接字绑定,接收该地址收到的内容
      1 bind(socket_send, &server, sizeof(SOCKADDR));
    • 保存是谁发来的信息的ip
      1 SOCKADDR_IN client;
    • 创建字符串用于接收
      1 //存储获取的字符串
      2     char strreceive[1024] = { 0 };
      3     //存储获取的长度
      4     int length;
    • 通过套接字获取
       1 //获取长度
       2     length = sizeof(SOCKADDR);
       3     while (1)
       4     {
       5         //通过服务器套接字接受信息
       6         recvfrom(socket_send, strreceive, 1024, 0, &client, &length);
       7         if (strlen(strreceive) > 0)
       8         {
       9             printf("收到%s
      ", strreceive);
      10             printf("%d
      ", client.sin_addr.S_un.S_addr);
      11             memset(strreceive, 0, 1024);
      12         }
      13     }
    • 版本检测
       1 //版本,2,2版本
       2     WORD wversion = MAKEWORD(2, 2);
       3     //当前版本
       4     WSADATA wsadata;
       5     //获取版本对比,开始通信
       6     int error = WSAStartup(wversion, &wsadata);
       7 
       8     //如果版本与指定的不对则返回
       9     if (error != 0)
      10     {
      11         printf("error");
      12         return;
      13     }
      14 
      15     //取出低八位,高八位,对比版本
      16     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
      17     {
      18         printf(" version  error");
      19         return;
      20     }
    • 关闭
      1 closesocket(socket_send);//关闭
      2     WSACleanup();

    完整代码

     1 #define  _CRT_SECURE_NO_WARNINGS
     2 #include<stdio.h>
     3 #include <stdlib.h>
     4 #include <string.h>
     5 //网络通信
     6 #include<winsock.h>
     7 #pragma  comment(lib,"ws2_32.lib")
     8 
     9 
    10 void main()
    11 {
    12     //存储获取的字符串
    13     char strreceive[1024] = { 0 };
    14     //存储获取的长度
    15     int length;
    16     //服务器套接字,创建UDP通信
    17     SOCKET socket_send;
    18     //创建服务器端结构体保存ip地址以及端口号
    19     SOCKADDR_IN server;
    20     //保存是谁发来的信息的ip
    21     SOCKADDR_IN client;  
    22 
    23     //版本,2,2版本
    24     WORD wversion = MAKEWORD(2, 2);
    25     //当前版本
    26     WSADATA wsadata;
    27     //获取版本对比,开始通信
    28     int error = WSAStartup(wversion, &wsadata);
    29 
    30     //如果版本与指定的不对则返回
    31     if (error != 0)
    32     {
    33         printf("error");
    34         return;
    35     }
    36 
    37     //取出低八位,高八位,对比版本
    38     if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wVersion) != 2)
    39     {
    40         printf(" version  error");
    41         return;
    42     }
    43 
    44     //创建UDP通信
    45     socket_send = socket(AF_INET, SOCK_DGRAM, 0);
    46 
    47     //设置通信方式
    48     server.sin_family = AF_INET;
    49     //获取本地ip信息
    50     server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
    51     server.sin_port = htons(8848);//端口
    52 
    53     //把服务器的ip信息和端口信息与服务器套接字绑定
    54     bind(socket_send, &server, sizeof(SOCKADDR));
    55     //获取长度
    56     length = sizeof(SOCKADDR);
    57     while (1)
    58     {
    59         //通过服务器套接字接受信息
    60         recvfrom(socket_send, strreceive, 1024, 0, &client, &length);
    61         if (strlen(strreceive) > 0)
    62         {
    63             printf("收到%s
    ", strreceive);
    64             printf("%d
    ", client.sin_addr.S_un.S_addr);
    65             memset(strreceive, 0, 1024);
    66         }
    67     }
    68 
    69     closesocket(socket_send);//关闭
    70     WSACleanup();
    71 
    72     system("pause");
    73 
    74 
    75 }
  • 相关阅读:
    学习:类和对象——构造函数和析构函数
    学习:类和对象——封装
    学习:引用类型
    学习:内存分区模型
    实现:通讯录管理系统
    实现:结构体案例
    学习:结构体
    实现:指针和冒泡函数和数组
    学习:指针
    学习:函数的分文件编写
  • 原文地址:https://www.cnblogs.com/xiaochi/p/8468014.html
Copyright © 2011-2022 走看看