UDP通信程序调试报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

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.h"

Udp应用程序除了涉及到一般的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地址和端口号。端口号设置在1024~4096之间。

WSADATA wsadata;

WSAStartup(0x101,&wsadata);

先定义一个WSADATA结构指针,用于记录windows套接字的相关信息。WSADATA如下:TypedefstructWSAData{

WORD wVersion;//调用者使用的WS2_32D.LL的版本号

WORD wHighVerion;//表示WS2_32D.LL支持的最高版本

charszDescription[WSADESCRIPTION_LEN+1];

charszSystemStatus[WSASYS_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_zero[8]; //留作备用,需要指定为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/IP

ntd_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 error\n");

err_exit();

}

对本机机IP地址结构体的赋值和目标机的方法相同,只是参数不一样。

创建udp套接字

相关文档
最新文档