运行截图

客户端

  • 创建客户端套接字,用于创建UDP通信

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

客户端完整代码

 #define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
//网络通信
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
//存储获取的字符串
char strreceive[] = { };
//获取的字符串长度
int length;
//客户端的套接字,用于创建UDP通信
SOCKET socket_client;
//创建客户端结构体保存ip地址以及端口号
SOCKADDR_IN sever;
SOCKADDR_IN severTmp; //UDP版本,2,2版本
WORD wversion=MAKEWORD(,);
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error!=)
{
printf("error");
return;
} //取出低八位与高八位进行版本对比
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
}
//创建UDP通信
socket_client = socket(AF_INET, SOCK_DGRAM, ); //设置通信模式
sever.sin_family = AF_INET;
//设置通信地址
sever.sin_addr.S_un.S_addr = inet_addr("192.168.0.104");
//开启通信端口
sever.sin_port = htons(); //打开文件
FILE *pfr = fopen("1.txt", "rb");
//不断进行数据交换
while ()
{
char str[] = { };
fgets(str, , stdin);
//通过套接字发送信息到服务器
sendto(socket_client, str, strlen(str) + , , &sever, sizeof(SOCKADDR)); } //关闭
closesocket(socket_client);
//关闭
WSACleanup(); system("pause");
}

服务器端

  • 创建服务器端套接字,用于创建UDP通信

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

完整代码

 #define  _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include <stdlib.h>
#include <string.h>
//网络通信
#include<winsock.h>
#pragma comment(lib,"ws2_32.lib") void main()
{
//存储获取的字符串
char strreceive[] = { };
//存储获取的长度
int length;
//服务器套接字,创建UDP通信
SOCKET socket_send;
//创建服务器端结构体保存ip地址以及端口号
SOCKADDR_IN server;
//保存是谁发来的信息的ip
SOCKADDR_IN client; //版本,2,2版本
WORD wversion = MAKEWORD(, );
//当前版本
WSADATA wsadata;
//获取版本对比,开始通信
int error = WSAStartup(wversion, &wsadata); //如果版本与指定的不对则返回
if (error != )
{
printf("error");
return;
} //取出低八位,高八位,对比版本
if (LOBYTE(wsadata.wVersion) != || HIBYTE(wsadata.wVersion) != )
{
printf(" version error");
return;
} //创建UDP通信
socket_send = socket(AF_INET, SOCK_DGRAM, ); //设置通信方式
server.sin_family = AF_INET;
//获取本地ip信息
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
server.sin_port = htons();//端口 //把服务器的ip信息和端口信息与服务器套接字绑定
bind(socket_send, &server, sizeof(SOCKADDR));
//获取长度
length = sizeof(SOCKADDR);
while ()
{
//通过服务器套接字接受信息
recvfrom(socket_send, strreceive, , , &client, &length);
if (strlen(strreceive) > )
{
printf("收到%s\n", strreceive);
printf("%d\n", client.sin_addr.S_un.S_addr);
memset(strreceive, , );
}
} closesocket(socket_send);//关闭
WSACleanup(); system("pause"); }

最新文章

  1. C++设计模式-Adapter适配器模式
  2. 将sqlserve数据绑定到dataGridView中及一些操作
  3. JavaScript实现li隔行变色
  4. C++智能指针管理类
  5. MCADEx Tools 6.3下载地址
  6. numpy的矩阵运算
  7. Windows -DOS 下Yii创建应用及出错处理
  8. WPF自定义控件(1)——仪表盘设计[1]
  9. Centos7上安装单机版redis
  10. 1 vmware 如何联网,以及行命令令初步
  11. storybook构建vue组件
  12. ArcGIS案例教程-通过点坐标生成圆
  13. webstorm 2018 激活破解方法大全
  14. 01-学习vue前的准备工作
  15. 回顾一下C++ 编写DLL
  16. 【转】Pandas的Apply函数——Pandas中最好用的函数
  17. npm使用国内淘宝镜像的方法
  18. &lt;Java&gt;&lt;!!!&gt;&lt;面试题&gt;
  19. kafka NoNode错误
  20. 超全面!UI设计师如何适配2018新款iPhone

热门文章

  1. whereis---定位指令的二进制程序、源代码文件和man手册页等相关文件的路径。
  2. 51nod 子序列的个数 (动规分析方法)
  3. 六台机器搭建RedisCluster分布式集群
  4. Java并发包之CountDownLatch用法
  5. Activiti工作流框架学习(二)——使用Activiti提供的API完成流程操作
  6. 为线程绑定CPU
  7. 具体解释NoSQL数据库使用实例
  8. hdu(2859)——Phalanx(dp)
  9. 基于r-Kernel的LiteOS操作系统
  10. 在resin配置參数实现JConsole远程监控JVM