UDP通信程序调试报告.doc_第1页
UDP通信程序调试报告.doc_第2页
UDP通信程序调试报告.doc_第3页
UDP通信程序调试报告.doc_第4页
UDP通信程序调试报告.doc_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

UDP 通信实验调试报告一、调试内容:使用VC6.0作为开发平台,采用C语言编写udp程序,实现两台PC机通过以太网口传输数据。两台PC机,一台运行开发程序,一台运行通信调试用端口精灵WizPort以太网口监视器作为程序调试辅助工具。二、程序流程使用UDP通信程序运行步骤:预先设置本机和目标机的IP地址和端口号创建本机上的套接字socket将套接字与本机的IP地址和端口号绑定检测套接字设备文件的读写状态,接收和发送数据三、程序代码简析用Compaq Visual Fortran 6编译器可以调试程序#include #include #include #include #include #include #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 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_32D.LL支持的最高版本charszDescriptionWSADESCRIPTION_LEN+1;charszSystemStatusWSASYS_STATUS_LEN+1; unsigned shortiMaxSockets;/表示最多可以打开多少套接字 unsigned short IMaxUdpDg;/表示数据报的最大长度char FAR* lpVendorInfro;/套接字厂商信息WSADATA使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用程序中。以后应用程序就可以调用所请求的 Socket库中的其它Socket函数了。该函数执行成功后返回0。对各终端的IP地址结构设置定义当地和目标套接字地址结构,指定使用的地址家族即地址格式,端口号码,IP地址。套接字地址结构用于解决TCP/IP寻址。套接字结构体类型的定义:structsockaddr_in short sin_family; /指定地址家族即地址格式u_shortsin_port; /端口号码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;structsockaddr_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,表示地址错 误,打印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;第三个参数指定应用程序所使用的通信协议。该函数如果调用成功就返回新创建的套接字的描述符,如果失败就返回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以后,套接字数据结构中有一个默认的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_communicate(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、程序使用slect()函数检查套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息。select()调用返回处于就绪状态并且已经包含在fd_set结构中的描述字总数;如果超时则返回0;否则的话,返回SOCKET_ERROR错误,应用程序可通过WSAGetLastError获取相应错误代码。当返回位-1时,所有描述符集清0。当返回为0时,超时不修改任何描述符集。当返回为非0时,在3个描述符集里,依旧是1的位就是准备好的描述符。这时要用FD_ISSET ()函数来检测fd在fdset集合中的状态是否变化并返回整型,当检测到fd状态发生变化时返回真,否则,返回假(0)ret = select(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)运行端口精灵侧:本机IP:10.1.19.198注意:发送数据的显示:查看显示方式ASII码对端程序运行后,即接收到20个字符1点击工具以太网定时发送再次点击工具以太网定时发送,则取消发送3)运行程序侧:本机IP:10.1.1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论