实验四使用UDP进行通讯.docx
- 文档编号:17524859
- 上传时间:2023-07-26
- 格式:DOCX
- 页数:13
- 大小:237.53KB
实验四使用UDP进行通讯.docx
《实验四使用UDP进行通讯.docx》由会员分享,可在线阅读,更多相关《实验四使用UDP进行通讯.docx(13页珍藏版)》请在冰点文库上搜索。
实验四使用UDP进行通讯
实验四使用UDP进行通讯
本实验使用2个学时
一、实验目的
1.掌握socket的初始化;
2.掌握UDP发送与接收的相关函数;
二、实验设备及环境
安装VC6.0的主机
三、实验步骤
上图就是服务器端和客户端的工作流程。
1、把下面的2个文件udpclient.c和udpserver.c分别编译链接成2个程序udpclient.exe和udpserver.exe。
客户端
//udpclient.c
#include
#include
#include
#defineDEFAULT_PORT5000//宏定义默认端口
#defineBUFFER_LENGTH1024
voidmain(intargc,char*argv[])
{
WSADATAwsaData;
intsClient;
unsignedshortiPort=DEFAULT_PORT;
intiLen;
intiSend;
charsend_buf[20];
charrecv_buf[BUFFER_LENGTH];
structsockaddr_inser;//套接字结构体
if(argc<2)
{
printf("Usage:
%s[serverIPaddress]\n",argv[0]);
return;
}
memset(recv_buf,0,sizeof(recv_buf));//清空接收缓存
if(WSAStartup(MAKEWORD(2,2),&wsaData)!
=0)//初始化winsock
{
printf("FailedtoloadWinsock!
\n");
return;
}
ser.sin_family=AF_INET;//Internet类型
ser.sin_port=htons(iPort);//端口号
ser.sin_addr.s_addr=inet_addr(argv[1]);//IP地址
sClient=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);//初始化套接字,使用UDP协议
if(sClient==INVALID_SOCKET)//如果初始化失败
{
printf("socket()Failed!
\n");
return;
}
while
(1)
{
printf("->");
gets(send_buf);
if(_stricmp(send_buf,"quit")==0)
{
break;
}
iLen=sizeof(ser);
iSend=sendto(sClient,send_buf,sizeof(send_buf),0,(SOCKADDR*)&ser,iLen);//发送
if(iSend==SOCKET_ERROR)
{
printf("sendto()Failed!
\n");
}
}
closesocket(sClient);
WSACleanup();
}
服务器端
//udpserver.c
#include
#include
#defineDEFAULT_PORT5000
#defineDATA_BUFFER1024
voidmain()
{
WSADATAwsaData;
intsSocket;
unsignedshortiPort=DEFAULT_PORT;
intiLen,iRecv;
charrecvbuf[DATA_BUFFER];
structsockaddr_inser,cli;
printf("---------------------\n");
printf("Serverwaiting\n");
printf("---------------------\n");
if(WSAStartup(MAKEWORD(2,2),&wsaData)!
=0)
{
printf("FailedtoloadWinsock.\n");
return;
}
sSocket=socket(AF_INET,SOCK_DGRAM,0);
if(sSocket==INVALID_SOCKET)
{
printf("socket()Failed!
\n");
return;
}
ser.sin_family=AF_INET;
ser.sin_port=htons(iPort);
ser.sin_addr.s_addr=htonl(INADDR_ANY);
if(bind(sSocket,(structsockaddr*)&ser,sizeof(ser))==SOCKET_ERROR)//绑定
{
printf("bindingFailed!
\n");
return;
}
iLen=sizeof(cli);
memset(recvbuf,0,sizeof(recvbuf));
while
(1)
{
iRecv=recvfrom(sSocket,recvbuf,DATA_BUFFER,0,(SOCKADDR*)&cli,&iLen);
if(iRecv==(-1))
{
printf("receiveFailed!
\n");
}
else
{
printf("FromIP:
[%s]:
[%d]->%s\n",
inet_ntoa(cli.sin_addr),
ntohs(cli.sin_port),recvbuf);
}
}
closesocket(sSocket);
WSACleanup();
}
首先打开VC6.0
新建控制台程序
新建一个C文件
把udpclient.c的代码复制粘贴到新建的c文件中并保存。
2、必须再添加静态库ws2_32.lib,链接才不会出错。
同理对udpserver.c再作相同操作生成udpserve.exe。
3、成功编译链接后,在命令窗口下用命令行运行程序
分别打开2个命令窗口,一个用于运行server,另一个运行client
输入d:
再输入cdudpserver/debug
输入udpserver
再打开一个新的命令窗口
输入d:
再输入cdudpclient/debug
输入udpclient127.0.0.1
然后输入要发送的字符串Hi,Iamaclient.
接着在服务端的窗口会看到接收到的字符串。
如果另打开一个命令窗口,输入netstat–a
将看到所有正在使用的监听端口。
4、试使用广播地址进行通信,如udp_c192.168.0.255
(1)输入:
hi,howareyou?
(2)接收端显示:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 实验四 使用UDP进行通讯 实验 使用 UDP 进行 通讯