运行截图

客户端

  • 创建客户端套接字,用于创建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"); }

96.udp通信的更多相关文章

  1. vector(可变数组) 用于UDP通信

    头文件: #include<vector.h> 然后,声明并初始化vctor数组. vector<char>  str(len); 其中len可以是变量或者常量.(其实用常量就 ...

  2. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  3. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.2

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  4. 高性能 TCP & UDP 通信框架 HP-Socket v3.5.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  5. 高性能 TCP & UDP 通信框架 HP-Socket v3.4.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  6. 高性能 TCP & UDP 通信框架 HP-Socket v3.3.1

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

  7. HP-SOCKET TCP/UDP通信框架库解析

    项目概述: HP-SOCKET是一套通用TCP/UDP通信框架,包括服务器.客户端.Agent组件:其目标是提供高性能.通用性.简易性.可扩展.可定制: 鉴于此,其仅实现基本的通用框架通信.数据收发功 ...

  8. .Net开发笔记(十四) 基于“泵”的UDP通信(接上篇)

    上一篇中说到了“泵”在编程中的作用以及一些具体用处,但没有实际demo,可能不好理解,这篇文章我分享一个UDP通信的demo,大概实现了类似“飞鸽传书”在局域网中文本消息和文件传输的功能.功能不全也不 ...

  9. 高性能 TCP & UDP 通信框架 HP-Socket v3.2.3

    HP-Socket 是一套通用的高性能 TCP/UDP 通信框架,包含服务端组件.客户端组件和 Agent 组件,广泛适用于各种不同应用场景的 TCP/UDP 通信系统,提供 C/C++.C#.Del ...

随机推荐

  1. HDU 4359 Easy Tree DP? 组合数学+动归

    题意:定义一种树,每个节点的权值都是20到2n-1,每个权值出现一次,每个节点的左子树的权值和小于右子树,除非只有一个子树.给你n和d,问有n个节点且恰好深度是d的这种树有多少种. 比赛的时候我没有做 ...

  2. Linux系统安全加固(一)

    Linux系统安全加固(一)     去年8月,某所网站遭黑客攻击瘫痪虽然港交所随后及时启用备用系统,但还是致使7支股票1支债卷被迫停牌,次日再次遭受攻击而瘫痪:在去年年底继CSDN信息安全出现之后, ...

  3. SQL 小技能

    1. SET STATISTICS TIMEON   附带原文 2.关于索引,是自己可以用Tsql语句建,也可以在设计表的时候选中某一个字段建立索引   一般而言,主键属于聚合索引(字典:A-Z);反 ...

  4. jquery计算两个日期的相差天数

    var days = daysBetween('2016-11-01','2016-11-02'); /** * 根据两个日期,判断相差天数 * @param sDate1 开始日期 如:2016-1 ...

  5. Ubuntu16.04添加HP Laserjet Pro M128fn打印机和驱动

    一.全部设置->打印机->添加新打印机  添加打印机 二.选择自动搜索到的网络打印机HP Laserjet Pro M128fn,点击添加. 三.添加打印机完成,打印测试页进行测试. 四. ...

  6. python 协程学习

    协程 协程,又称微线程,纤程.英文名Coroutine.一句话说明什么是线程:协程是一种用户态的轻量级线程. 协程拥有自己的寄存器上下文和栈.协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来 ...

  7. python之路:发附带文件的邮件

    发邮件的思路(借用第三方服务): 1.模拟服务器,其中有:服务器地址,发送者地址.发送者的密码 2.创建一个带附件的实例:1.创建一个massage 2.massage包括发送者的地址.接受者的地址. ...

  8. request.getSession().getServletContext().getRealPath("")获取工程目录 路径修改

    使用request.getSession().getServletContext().getRealPath("")获取工程目录. 设置server Locations在serve ...

  9. Hadoop for .NET Developers

    Hadoop for .NET Developers(一):理解Hadoop 这些年来,大数据已经成为分析业界的兴奋源头.对于这个博客系列的目的,我将松散定义这个术语指的重点是从数据核心业务系统里数据 ...

  10. jquery的ajax总结

    jquery的ajax总结 一.总结 一句话总结:ajax函数中层级关系如下: 最底层的封装方式: $.ajax(); 第二层: .load(),$.get(), $.post() 最高层: $.ge ...