TCP/IP编程调用Windows的库实现UDP网络通信(代码实例)

简介: UDP协议的实现:UDP协议是基于IP的。(本文采用Qt进行开发实现,且结合了C/C++混合编程的知识)

UDP协议的实现:

UDP协议是基于IP的。(本文采用Qt进行开发实现,且结合了C/C++混合编程的知识)

1、新建一个源文件udp.c与头文件udp.h,并且在Qt项目文件中 添加Windows库“winsock2.h”如下:20180912215348975.png

2、在头文件创建UDP发送端和接收端函数:


#ifndef UDP_H
#define UDP_H
extern "C"
{
int Socket_send(char *ip);//udp发送
int Socket_recv();//接收端
}
#endif // UDP_H


3、接下来就是具体的代码实现了:

#include <stdio.h>
#include <winsock2.h>
int Socket_send(char *ip)
{
    size_t vc = 0;
    //初始化socket
    char buf[1024] = {0};//传输使用的字符串
    DWORD ver;
    WSADATA wsaData;
    ver = MAKEWORD(1,1);//调用wsastartup时告诉Windows使用的sock版本
    WSAStartup(ver, &wsaData);
    //创建socket结构体
    SOCKET st = socket(AF_INET, SOCK_DGRAM, 0);//建立一个socket
    //创建结构体
    struct sockaddr_in addr;
    memset(&addr, 0, sizeof(addr));//初始化结构体
    addr.sin_family = AF_INET;//代表使用的是TCP/IP的地址
    addr.sin_port = htons(8080);//设置使用的端口号
    addr.sin_addr.s_addr = inet_addr(ip);//自检查网口IP
    while(1)
    {
        memset(buf, 0, sizeof(buf));
        gets(buf);
        if(buf[0] == '0')
        {//循环退出条件
            break;
        }
        vc = sendto(st, buf, strlen(buf), 0, (struct sockaddr *)&addr, sizeof(addr));//发送函数
    }
    closesocket(st);//使用完socket要将其关闭
    WSACleanup();//释放win下socket内部的相关资源
    return vc;
}
int Socket_recv()
{
    //初始化socket
    char buf[1024] = {0};//传输使用的字符串
    size_t rc = 0;
    DWORD ver;
    WSADATA wsaData;
    ver = MAKEWORD(1,1);//调用wsastartup时告诉Windows使用的sock版本
    WSAStartup(ver, &wsaData);
    //创建socket结构体
    SOCKET st = socket(AF_INET, SOCK_DGRAM, 0);//建立一个socket
    //创建结构体
    struct sockaddr_in recvaddr;
    memset(&recvaddr, 0, sizeof(recvaddr));//初始化结构体
    recvaddr.sin_family = AF_INET;//代表使用的是TCP/IP的地址
    recvaddr.sin_port = htons(8080);//设置使用的端口号
    recvaddr.sin_addr.s_addr = htonl(INADDR_ANY);//接收端采用任意的IP地址
    if(bind(st, (struct sockaddr *)&recvaddr, sizeof(recvaddr)) > -1)
    {
        struct sockaddr_in sendaddr;
        memset(&sendaddr, 0, sizeof(sendaddr));
        int len = sizeof(sendaddr);
        while(1)
        {
            memset(buf, 0, sizeof(buf));
            rc = recvfrom(st, buf, sizeof(buf), 0, (struct sockaddr *)&sendaddr, &len);
            //rc = recv(st, buf, sizeof(buf), 0);
            printf("recvive = %s\n", buf);
        }
       // printf("IP = %u\n", sendaddr.sin_addr.s_addr);
    }
    closesocket(st);//使用完socket要将其关闭
    WSACleanup();//释放win下socket内部的相关资源
    return rc;
}


最后先运行接收,然后尝试使用发送端发送字符,成功了!(记住一定要关闭防火墙以及设置好系统环境变量,否则会出现程序无法启动(环境变量没有设置好,找不到libwin_32dll的库)以及接收端被防火墙屏蔽无法接收数据)

20180912215723360.png


相关文章
|
6月前
|
安全 生物认证 网络安全
windows10无法设置默认保存位置怎么办?显示错误代码0x80070002怎么解决?
Win10系统下载文件时,默认会保存在特定位置,但用户可自行修改。若更改后仍无效,可通过删除目标磁盘中的特定文件夹、修改注册表权限、“干净启动”排除干扰软件或使用第三方修复工具等方式解决此问题。
1267 0
|
8月前
|
域名解析 网络协议 安全
计算机网络TCP/IP四层模型
本文介绍了TCP/IP模型的四层结构及其与OSI模型的对比。网络接口层负责物理网络接口,处理MAC地址和帧传输;网络层管理IP地址和路由选择,确保数据包准确送达;传输层提供端到端通信,支持可靠(TCP)或不可靠(UDP)传输;应用层直接面向用户,提供如HTTP、FTP等服务。此外,还详细描述了数据封装与解封装过程,以及两模型在层次划分上的差异。
1774 13
|
4月前
|
安全 Linux 网络安全
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
139 0
Nipper 3.9.0 for Windows & Linux - 网络设备漏洞评估
|
5月前
|
Windows
office出现0xc0000142错误?windows错误代码为0xc0000142?
office出现0xc0000142错误?windows错误代码为0xc0000142?
215 0
|
7月前
|
监控 安全 网络协议
恶意软件无处逃!国内版“Manus”AiPy开发Windows沙箱工具,进程行为+网络传输层级监控! 头像 豪气的
NImplant.exe 是一款后渗透测试工具,可实现远程管理与持久化控制。其优点包括无文件技术、加密通信和插件扩展,但也存在被检测风险及配置复杂等问题。为深入分析其行为,我们基于 aipy 开发了 Windows 沙箱工具,针对桌面上的 NImplant.exe 进行多维度分析,涵盖进程行为、网络连接(如 TCP 请求、目标 IP/域名)、文件控制等,并生成传输层监控报告与沙箱截图。结果显示,aipy 工具响应迅速,报告清晰易读,满足分析需求。
|
7月前
|
网络协议 安全 测试技术
Windows为何在高速网络环境频繁“失速”?
本文深入剖析了企业在高速网络环境中,因Windows系统限制导致传输速率下降的问题,包括接收缓冲区、安全软件及老旧设备等因素,并提供四步定位法及优化方案,助力企业突破传输瓶颈,提升效率。
|
8月前
|
安全 Ubuntu Linux
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
292 0
Nipper 3.8.0 for Windows & Linux - 网络设备漏洞评估
|
9月前
|
XML 安全 网络安全
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
223 0
Nipper 3.7.0 Windows x64 - 网络设备漏洞评估
|
安全 Windows
【Azure Cloud Service】在Windows系统中抓取网络包 ( 不需要另外安全抓包工具)
通常,在生产环境中,为了保证系统环境的安全和纯粹,是不建议安装其它软件或排查工具(如果可以安装,也是需要走审批流程)。 本文将介绍一种,不用安装Wireshark / tcpdump 等工具,使用Windows系统自带的 netsh trace 命令来获取网络包的步骤
316 32
|
网络协议
网络通信的基石:TCP/IP协议栈的层次结构解析
在现代网络通信中,TCP/IP协议栈是构建互联网的基础。它定义了数据如何在网络中传输,以及如何确保数据的完整性和可靠性。本文将深入探讨TCP/IP协议栈的层次结构,揭示每一层的功能和重要性。
924 5