【网络编程】UDP简单网络编程2(First Contact UDP)

概述

本篇文章是对网络编程课程的上机记录笔记,本节是在实验1基础上的拓展,增加了修改udp服务器端代码的内容。
实验要求:根据udp服务器端的代码,使用getsockname()函数,修改代码,使其运行出来的结果如下图:
在这里插入图片描述
相关代码资源可在:https://github.com/patrikarlos?tab=repositories.中获得

实验过程

1.首先,让我们在c++编译器中打开代码,方便调试。(这里用的是xcode)
在这里插入图片描述
2.定位到需要更改的语句
在这里插入图片描述
就是你啦!

3.内心明确,要改的内容:
这里要输出本地地址:当前服务器的端口号
0.0.0.0:4950

4.更改后的代码为:

getsockname(sockfd,(struct sockaddr*)&local_sin, &local_sinlen);
    myAdd = inet_ntop(local_sin.sin_family, &local_sin.sin_addr, myAddress, sizeof(myAddress));
    printf("Listening on %s:%d\n", myAdd, ntohs(local_sin.sin_port));
    printf("listener: waiting to recvfrom...\n");

注意使用getsockname()函数,该函数得到一个类型为sockaddr*的结构体,该结构体中存储了有关在服务器上监听的这个套接字local_sin的信息。
虽然此时local_sin的sin_addr中存储的的是当前主机的地址,但是,由于计算机内部的编码规律,此时的它还是一个网络字节序,即计算机内部的一个我们看不懂的地址信息。要解决这个问题,我们需要用inet_ntop()函数将其转换为xx.xx.xx.xx这类人类看得懂的网络地址表现形式。
在经过了上述操作后,变量myAdd中就成功存储了当前服务器的地址,同时,我们来转变一下服务器的端口地址,即ntohs(local_sin.sin_port)。这样就成功输出啦。

5.还不错吧!
在这里插入图片描述

6.下一个修改是修改服务器,使其也打印十六进制转储消息。这样,消息就像往常一样被打印,然后是消息的十六进制转储。使用“%0x”在printf()中格式化输出。例如;
在这里插入图片描述
示例代码:

for(int i=0; i<numbytes;i++){
            printf("%0x ", buf[i]);
        }

仍在思考,尚未解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值