专栏首页逆向技术网络编程第三讲UDP编写

网络编程第三讲UDP编写

            网络编程第三讲UDP编写

一丶UDP简介

  UDP是面向无连接的.就是说数据传输会丢掉.网络延时比较大的情况下.会早上丢包.例如视频通话.就是UDP

UDP不需要建立建立. 下面有UDP编写流程图

下图为TCP 跟UDP的区别.

UDP下收发函数有区别.

  发送数据: TCP: send UDP sendto

  接受数据:TCP: recv UDP recvfrom

二丶UDP编写的完整代码

服务端:

#include <stdio.h>
#include <winsock2.h>
#include <Windows.h>
 
#pragma comment(lib,"ws2_32.lib")
#define  PORT 6000
 
int main(int argc, char* argv[])
{
    //初始化网络环境
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        printf("WSAStartup failed\n");
        return -1;
    }
 
    //建立一个UDP的socket
    SOCKET sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sock == SOCKET_ERROR)
    {
        printf("create socket failed\n");
        return -1;
    }
 
    //绑定地址信息
    sockaddr_in serverAddr;
    serverAddr.sin_family = AF_INET;
    serverAddr.sin_port = htons(PORT);
    serverAddr.sin_addr.S_un.S_addr = htonl(INADDR_ANY);
 
    bind(sock, (sockaddr*)&serverAddr, sizeof(sockaddr));
    
    char buf[512];
    while (TRUE)
    {
        memset(buf, 0, 512);
        // 网络节点的信息,用来保存客户端的网络信息
        sockaddr_in clientAddr;
        memset(&clientAddr, 0, sizeof(sockaddr_in));
 
        int clientAddrLen = sizeof(sockaddr);
        //接收客户端发来的数据
        int ret = recvfrom(sock, buf, 512, 0,(sockaddr*) &clientAddr,&clientAddrLen );
        
        printf("Recv msg:%s from IP:[%s] Port:[%d]\n", buf,inet_ntoa(clientAddr.sin_addr),ntohs(clientAddr.sin_port));
        // 发一个数据包返回给客户
        sendto(sock, "Hello World!", strlen("Hello World!"), 0, (sockaddr*)&clientAddr, clientAddrLen);
        printf("Send msg back to IP:[%s] Port:[%d]\n", inet_ntoa(clientAddr.sin_addr), ntohs(clientAddr.sin_port));
    }
    return 0;
}

客户端

#include <stdio.h>
#include <winsock2.h>
#include <Windows.h>
 
#pragma comment(lib,"ws2_32.lib")
#define  PORT 6000
int main(int argc, char* argv[])
{
    //初始化网络环境
    WSADATA wsa;
    if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
    {
        printf("WSAStartup failed\n");
        return -1;
    }
    //建立一个UDP的socket
    SOCKET sockClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);
    if (sockClient == INVALID_SOCKET)
    {
        printf("create socket failed\n");
        return -1;
    }
    // 申明一个网络地址信息的结构体,保存服务器的地址信息
    sockaddr_in addr = { 0 };
    addr.sin_family = AF_INET;
    addr.sin_port = htons(PORT);
    addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
 
    char buf[] = "client test!";
    //发送数据
    int dwSent = sendto(sockClient, buf, strlen(buf), 0, (SOCKADDR *)&addr, sizeof(SOCKADDR));
    if (dwSent == 0)
    {
        printf("send %s failed\n", buf);
        return -1;
    }
    printf("send msg:%s\n", buf);
 
    char recvBuf[512];
    memset(recvBuf, 0, 512);
 
    sockaddr_in addrSever = { 0 };
    int nServerAddrLen=sizeof(sockaddr_in);
    // 接收数据
    int dwRecv = recvfrom(sockClient, recvBuf, 512, 0, (SOCKADDR *)&addrSever,&nServerAddrLen);
    printf("Recv msg from server : %s\n", recvBuf);
    //关闭SOCKET连接
    closesocket(sockClient);
    //清理网络环境
    WSACleanup();
    system("pause");
    return 0;
}

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • x32下PsSetLoadImageNotifyRoutine的逆向

    纯属兴趣爱好.特来逆向玩玩. PsSetLoadImageNotifyRoutine 是内核中用来监控模块加载.操作系统给我们提供的回调. 我们只需要填写对应...

    IBinary
  • 16位汇编第五讲各种指令详解第一讲

    汇编指令详解 8080指令详解 1.8086系统下,Inter指令系统共有117条指令(看似很多,分一下类) 1.数据传送类指令(专门传送数据的) 2.算术运算...

    IBinary
  • 32位汇编第七讲,混合编程,内联汇编

              32位汇编第七讲,混合编程 混合编程的概念,有时候我们会想,C语言可不可以调用汇编的函数,或者反过来调用 或者说C语言里面内部直接内联汇编去...

    IBinary
  • 使用 TIMSDK 的自定义字段 iOS 示例

    "用户资料自定义字段","好友自定义字段","群成员维度自定义字段","群维度自定义字段" 均已键值对 Key-Value 形式存储并使用。扩展相应的字段 Ke...

    腾讯云 - zjiezhu
  • linux socket通讯获取本地的源端口号的实现方法

    关于TCP IP网络通讯的资料非常多,TCP IP通过IP数据包模式进行端对端通讯。典型的TCP数据包如下

    砸漏
  • Android更新资源文件浅思考

    最近在看 《深入探索Android热修复技术原理7.3Q.pdf》 时,遇到一个之前没有注意过的问题:关于资源修更新的Android的版本兼容?作为程序员我们需...

    静默加载
  • 笔记11 | 动态设置TextView的字体大小

    项勇
  • 多层感知机模型讲解

    若能求出$\frac{\nabla E}{\nabla w_{jk}}$的结果,便可知道所有的梯度信息

    mathor
  • jsp指令和EL表达式

    1.page指令 1.pageEncoding 指定jsp的编码 2.contextType 设置响应头 这两个东西其实使用任意一个即可。 3.errorPag...

    lwen
  • 什么是 Cookie 和 Session ?

    在现实生活中,当顾客在购物时,商城经常会赠送顾客一张会员卡,卡上记录客户的个人信息(姓名,手机号等),消费额度和积分额度等。顾客一旦接受了会员卡,以后每次光临该...

    cherishspring

扫码关注云+社区

领取腾讯云代金券