UDP通信程序调试报告

上传人:m**** 文档编号:477594340 上传时间:2023-10-06 格式:DOC 页数:7 大小:128KB
返回 下载 相关 举报
UDP通信程序调试报告_第1页
第1页 / 共7页
UDP通信程序调试报告_第2页
第2页 / 共7页
UDP通信程序调试报告_第3页
第3页 / 共7页
UDP通信程序调试报告_第4页
第4页 / 共7页
UDP通信程序调试报告_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《UDP通信程序调试报告》由会员分享,可在线阅读,更多相关《UDP通信程序调试报告(7页珍藏版)》请在金锄头文库上搜索。

1、UDP 通信实验调试报告一、调试内容:使用VC6.0作为开发平台,采用C语言编写udp程序,实现两台PC机通过以太网口传输数据。两台PC机,一台运行开发程序,一台运行通信调试用端口精灵WizPort以太网口监视器作为程序调试辅助工具。二、程序流程使用UDP通信程序运行步骤:预先设置本机和目标机的IP地址和端口号创建本机上的套接字socket将套接字与本机的IP地址和端口号绑定检测套接字设备文件的读写状态,接收和发送数据三、程序代码简析用Compaq Visual Fortran 6编译器可以调试程序#include #include #include #include #include #in

2、clude #include #include #include #include #include nser.hUdp应用程序除了涉及到一般的C语言库函数,还涉及到window功能调用,套接字函数调用,所以在VC开发平台默认的工程连接库中加入ws2_32.lib。该库对应ws2_32.dll,提供了网络相关API的支持,若使用其中的API,则应该将ws2_32.lib加入工程。在工程-设置-连接选项卡下的工程选项中输入ws2_32.lib(如上图)。nser.h中定义了一些常用宏。#define NTD_IPADDR 10.1.19.198/ntd的ip地址#define NTD_PORT

3、3006 /nt的端口号#define LOCAL_IPADDR 10.1.19.199/源端的ip地址#define LOCAL_PORT 3007 /源端的端口号以上定义了目标PC机和本地PC机的的IP地址和端口号。端口号设置在10244096之间。WSADATA wsadata;WSAStartup(0x101,&wsadata);先定义一个WSADATA结构指针,用于记录windows套接字的相关信息。WSADATA如下:TypedefstructWSAData WORD wVersion;/调用者使用的WS2_32D.LL的版本号 WORD wHighVerion;/表示WS2_32

4、D.LL支持的最高版本charszDescriptionWSADESCRIPTION_LEN+1;charszSystemStatusWSASYS_STATUS_LEN+1; unsigned shortiMaxSockets;/表示最多可以打开多少套接字 unsigned short IMaxUdpDg;/表示数据报的最大长度char FAR* lpVendorInfro;/套接字厂商信息WSADATA使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二

5、个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的 Socket库中的其它Socket函数了。该函数执行成功后返回0。对各终端的IP地址结构设置定义当地和目标套接字地址结构,指定使用的地址家族即地址格式,端口号码,IP地址。套接字地址结构用于解决TCP/IP寻址。套接字结构体类型的定义:structsockaddr_in short sin_family; /指定地址家族即地址格式u_shortsin_port; /端口号码

6、structin_addrsin_addr; /IP地址 char sin_zero8; /留作备用,需要指定为0我们用0来填充sin_zero数组,目的是让sockaddr_in结构的大小与sockaddr结构的大小一致。;其中,结构体类型in_addr的定义如下:structin_addr union struct u_char s_b1,s_b2,s_b3,s_b4; S_un_b;struct u_short s_w1,s_w2; S_un_w;u_longS_addr;/使用此变量进行描述IP地址 定义本机和目标机的套接字地址结构体:structsockaddr_inntd_ip;s

7、tructsockaddr_inlocal_ip;下面是对目标机IP地址结构体的赋值:ntd_ip.sin_family=AF_INET;/指定程序所使用的地址家族是TCP/IPntd_ip.sin_port=htons(unsigned short)NTD_PORT);/htons()将端口号整数转换为大端模式的网络字节序ntd_ip.sin_addr.s_addr=inet_addr(NTD_IPADDR);/把字符IP字符串转换为网络字节顺序排列的IP地址if(ntd_ip.sin_addr.s_addr=INADDR_NONE) /若s_addr为0xffffffff,表示地址错 误,

8、打印ntd地址错误提示,退出程序printf(ntdinet_addr errorn);err_exit();对本机机IP地址结构体的赋值和目标机的方法相同,只是参数不一样。创建udp套接字SOCKET socket(intaf,int type,int protocol)应用程序调用socket函数来创建一个能够进行网络通信的套接字。第一个参数指定应用程序使用的通信协议的协议族,对于TCP/IP协议族,该参数置PF_INET;第二个参数指定要创建的套接字类型,流套接字类型为SOCK_STREAM、数据报套接字类型为SOCK_DGRAM;第三个参数指定应用程序所使用的通信协议。该函数如果调用成

9、功就返回新创建的套接字的描述符,如果失败就返回INVALID_SOCKET(-1)。创建套接字使用的函数socket(AF_INET,SOCK_DGRAM,0)。类型为int的udp_fd是在主函数入口处定义的套接字句柄即套接字描述符变量。if(udp_fd = socket(AF_INET,SOCK_DGRAM,0) 0) printf(udp socket errorn);err_exit();/创建失败就退出将本机套接字绑定到指定的端口和地址上int bind(SOCKET s,conststructsockaddr FAR *name,intnamelen)当创建了一个Socket以后

10、,套接字数据结构中有一个默认的IP地址和默认的端口号。一个服务程序必须调用bind函数来给其绑定一个IP地址和一个特定的端口号。户程序一般不必调用bind函数来为其Socket绑定IP地址和端口号。该函数的第一个参数指定待绑定的Socket描述符;第二个参数指定一个sockaddr结构;第三个参数表示绑定的套接字数据结构长度。if(bind(udp_fd , (structsockaddr *)&local_ip, sizeof(local_ip) 0)/失败则返回-1printf(udp bind errorn);err_exit();/退出数据发送与接收循环void do_communic

11、ate(intfd)函数其中的形参fd是调用时传递来的socket句柄。循环过程使用到文件描述符的处理。1、先定义两个用于可读和可写检测的文件描述符集,并将socket句柄加入这两个集合fd_setreadable,writeable;FD_ZERO(&readable);/将readable清零使集合中不含任何fdFD_ZERO(&writeable);/将writeable清零使集合中不含任何fdFD_SET(fd,&readable);/将socket句柄fd加入readable集合FD_SET(fd,&writeable);/将socket句柄fd加入readable集合2、程序使用s

12、lect()函数检查套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。select()调用返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;如果超时则返回0;否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError获取相应错误代码。当返回位-1时,所有描述符集清0。当返回为0时,超时不修改任何描述符集。当返回为非0时,在3个描述符集里,依旧是1的位就是准备好的描述符。这时要用FD_ISSET ()函数来检测fd在fdset集合中的状态是否变化并返回整型,当检测到fd状态发生变化时返回真,否则,返回假(0)ret = sele

13、ct(fd+1, &readable, &writeable, NULL, &tm)if(ret = 0) /超时,不修改任何字符集,继续循环continue;if(ret = SOCKET_ERROR)/-1错误,程序退出 printf(select errorn);closesocket(fd);err_exit();if(FD_ISSET(fd, &readable)/socket的可读性检查及读取和打印操作if(FD_ISSET(fd, &writeable)/socket的可写性检查及发送操作三、与端口精灵的通信测试 测试结果:一端运行程序,另一端运行调试助手进行测试如下:2)运行端口精灵侧注意:发送数据的显示:查看显示方式ASII码对端程序运行后,即接收到20个字符1点击工具以太网定时发送再次点击工具以太网定时发送,则取消发送3)程序中的IP地址如下:#define NTD_IPADDR 10.1.19.198/ntd的ip地址#define NTD_PORT 3006 /nt的端口号#define LOCAL_IPADDR 10.1.19.199/源端的ip地址#define LOCAL_PORT 3008 /源端的端口号程序开始运行,即向对端连续发送20个字符1;发送数据时本机无显示接收到数据时显示ASCII码:上述运行结果稳定!

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > 总结/计划/报告

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号