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

下载本文档

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

文档简介

UDP通信试验调试报告一、调试内容:VC6.0作为开发平台,承受CudpPC机通过以太网口传输数据。两台PC机,一台运行开发程序,一台运行通信调试用端口精灵WizPort以太网口监视器作为程序调试关心工具。二、程序流程UDP通信程序运行步骤:IP地址和端口号socketIP地址和端口号绑定④检测套接字设备文件的读写状态,接收和发送数据三、程序代码简析CompaqVisualFortran6编译器可以调试程序#include<windows.h>#include<stdio.h>#include<conio.h>#include<string.h>#include<time.h>#include<errno.h>#include<stdlib.h>#include<sys/types.h>#include<winsock.h>#include<mmsystem.h>#include“nser.h“Udp应用程序除了涉及到一般的C语言库函数,还涉及到window功能调用,套接字函数调用,所以在VCws2_32.lib。ws2_32.dll,API的支持,假设使用其API,ws2_32.lib参加工程。在工程-->设置-->ws2_32.lib〔如上图。“nser.h“中定义了一些常用宏。#defineNTD_IPADDR “10.1.19.198“//ntd的ip地址#defineNTD_PORT 3006 //nt的端口号#defineLOCAL_IPADDR “10.1.19.199“//源端的ip地址#defineLOCAL_PORT 3007 //源端的端口号以上定义了目标PC机和本地PC机的的IP1024~4096之间。WSADATAwsadata;WSAStartup(0x101,&wsadata);先定义一个WSADATA构造指针,用于记录windowsWSADATA如下:TypedefstructWSAData{WORD wVersion;//调用者使用的WS2_32D.LL的版本号WORD 表示WS2_32D.LL支持的最高版本charszDescription[WSADESCRIPTION_LEN+1];charszSystemStatus[WSASYS_STATUS_LEN+1];unsignedshortiMaxSockets;//表示最多可以翻开多少套接字unsignedshort IMaxUdpDg;//表示数据报的最大长度charFAR*lpVendorInfro;//套接字厂商信息}WSADATA使用Socket的程序在使用Socket之前必需调用WSAStartup函数。该函数的第一个参数指明程序恳求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用其次个参数返回恳求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统依据恳求的Socket版原来搜寻相应的Socket库,然后绑定SocketSocket库中的其它Socket0。IP地址构造设置定义当地和目标套接字地址构造,指定使用的地址家族即地址格式,端口号码,IP地址。套接字地址构造TCP/IP寻址。套接字构造体类型的定义:structsockaddr_in{short sin_family;//指定地址家族即地址格式u_shortsin_port;//端口号码structin_addrsin_addr;//IP地址char sin_zero[8];//00sin_zerosockaddr_in构造的大小与sockaddr构造的大小全都。};in_addr的定义如下:structin_addr{union{struct{u_chars_b1,s_b2,s_b3,s_b4;}S_un_b;struct{u_shorts_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((unsignedshort)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_addrerror\n“);err_exit;}对本机机IP地址构造体的赋值和目标机的方法一样,只是参数不一样。udp套接字SOCKETsocket(intaf,inttype,intprotocol)应用程序调用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(“udpsocketerror\n“);err_exit;//创立失败就退出}将本机套接字绑定到指定的端口和地址上intbind(SOCKETs,conststructsockaddrFAR*name,intnamelen)SocketIP地址和默认的端口号。一个效劳程序必需调用bindIPbind函数来为其Socket绑定IPSocket描述符;其次个参数指定一个sockaddr构造;第三个参数表示绑定的套接字数据构造长度。if(bind(udp_fd,(structsockaddr*)&local_ip,sizeof(local_ip))<0)//失败则返回-1{printf(“udpbinderror\n“);err_exit;//退出}数据发送与接收循环void do_communicate(intfd)fdsocket句柄。循环过程使用到文件描述符的处理。1、先定义两个用于可读和可写检测的文件描述符集,并将socket句柄参加这两个集合fd_setreadable,writeable;FD_ZERO(&readable);//readable清零使集合中不含任何fdFD_ZERO(&writeable);////writeablefdFD_SET(fd,&readable);//socketfdreadable集合FD_SET(fd,&writeable);//socketfdreadable2、程序使用slect函数检查套接口的状态。对每一个套接口,调用者可查询它的可读性、可写性及错误状态信息select调用返回处于就绪fd_set0;否则的话,返回SOCKET_ERRORWSAGetLastError猎取相应错误代码。当返回位-10。0时,超时不修改任何描述符集。0时,在3个描述符集里,照旧是1的位就是预备好的描述符。这时要用FD_ISSET函数来fdfdsetfd状态发生变化时返回真,否则,返回假〔0〕ret=select(fd+1,&readable,&writeable,NULL,&tm)if(ret==0)//超时,不修改任何字符集,连续循环continue;

if(ret==SOCKET_ERROR)//-1错误,程序退出{printf(“selecterror\n“);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.19.199程序中的IP

温馨提示

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

评论

0/150

提交评论