基于UDP的客户与服务器通信程序.doc_第1页
基于UDP的客户与服务器通信程序.doc_第2页
基于UDP的客户与服务器通信程序.doc_第3页
基于UDP的客户与服务器通信程序.doc_第4页
基于UDP的客户与服务器通信程序.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

实验名称基于UDP的客户与服务器通信程序所属课程名称TCP/IP协议与网络编程实验时间2010/11/12实验地点信控系二机房学生姓名陈红梅实验器材及环境PC机、Visual C+ 6.0实验目的1. 在C+环境中编写代码,调用Winsock AIP基本函数,实现一个基于UDP的客户/服务器通信程序。实验内容1 熟练掌握函数的调用及其编程;2 理解掌握基于UDP的客户/服务器通信程序;3 理解函数的Winsock AIP基本函数的调用、返回值的类型、函数功能等。实验步骤1、 进入Visual C+6.02、 创建一个空工程sy13、 创建area.c文件4、 流程图否iRecv=recvfrom()调用失败输出调用失败开始确定端口号输出服务器WSAStartupsListen=SocketBind()是是是否否否否1isend=sendto()!=0调用成功Closesocket(saccept)Closesocket(saccept)结束=0!=0输出接收到的数据、IP地址、端口号=0 5、 编写代码程序一:服务器端#include#include#include#define DEFAULT_PORT 5050#define BUFFER_LENGTH 1024#pragma comment(lib,WS2_32.lib)void main()int iPort=DEFAULT_PORT;WSADATA wsaData; SOCKET sSocket;int iLen,iRecv,iSend;struct sockaddr_in ser,cli;char send_buf=Hollo!I am a server;char recv_bufBUFFER_LENGTH; printf(-); printf(Server waiting); printf(-);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(环境初始化错误:n);return; sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET) printf(socket()函数调用失败:n,WSAGetLastError();return;ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR) printf(bind()函数调用失败:n,WSAGetLastError();return; iLen=sizeof(cli);memset(recv_buf,0,sizeof(recv_buf);while(1) iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)&cli,&iLen); if(iRecv=SOCKET_ERROR) printf(recvfrom()函数调用失败:n,WSAGetLastError();break; else if(iRecv=0) break; else printf(recvfrom():%dn,recv_buf); printf(客户端的IP地址、端口号:%dn,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port); iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli); if(iSend=SOCKET_ERROR) printf(sendto()函数调用失败:n,WSAGetLastError();break; else if(iSend=0) break; else printf(sendto():调用成功!n); closesocket(sSocket);WSACleanup();流程图二:结束提示输入地址否输出调用失败开始带参main()定义变量WSAStartupSocket()Recvfrom()sendto()是是是是是否否否否WSAcleanup()Closesocket()Largc2接收数据初始化缓冲区程序二:客户机端程序#include#include#include#define DEFAULT_PORT 5050#define DATA_BUFFER 1024#pragma comment(lib,WS2_32.lib)void main(int argc,char* argv)WSADATA wsaData;SOCKET sClient; int iPort=5050;int iLen;int isend,iRecv;char send_buf=Hello! I am a client;char recv_bufDATA_BUFFER;struct sockaddr_in ser;if(argc2) printf(输入服务器的IP地址:n); return; elsememset(recv_buf,0,sizeof(recv_buf);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0) printf(Winsock环境初始化失败:n); return; sClient=socket(AF_INET,SOCK_DGRAM,0);if(sClient=INVALID_SOCKET) printf(socket()函数调用失败:%dn,WSAGetLastError(); return;ser.sin_family=AF_INET; ser.sin_port=htons(iPort);ser.sin_addr.s_addr=inet_addr(argv1); iLen=sizeof(ser); isend=sendto(sClient,send_buf,sizeof(send_buf),0,(struct sockaddr*)&ser,iLen);if(isend=SOCKET_ERROR) printf(sendto()函数调用失败:%dn,WSAGetLastError(); return;else if(isend=0)return;elseprintf(sendto()调用成功:n); iRecv=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(struct sockaddr*)&ser,&iLen); if(iRecv=SOCKET_ERROR) printf(recvfrom()函数调用失败:%dn,WSAGetLastError(); return;else if(iRecv=0) return;elseprintf(sendto():%sn,recv_buf); printf(-n);closesocket(sClient);WSACleanup();6、编译程序7、查看运行8、出错分析实验总结1 函数功能是:完成Winsock服务的初始化,从而可以在应用程序当中调用任何一个Winsock API函数;2 函数调用成功时返回03

温馨提示

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

评论

0/150

提交评论