收藏 分销(赏)

数据报套接字编程.ppt

上传人:pc****0 文档编号:13234360 上传时间:2026-02-08 格式:PPT 页数:14 大小:344KB 下载积分:10 金币
下载 相关 举报
数据报套接字编程.ppt_第1页
第1页 / 共14页
数据报套接字编程.ppt_第2页
第2页 / 共14页


点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,*,*,实验七,数据报套接字编程,程序流程,客户端代码,/*,调试环境:,VC+6.0,程序名称:,client.cpp,客户端,IP,地址和端口:由系统指定,程序功能:客户端程序向服务器发送数据,Hello!I am a client.,;客户端程序从服务器接收数据并进行显示,命令格式:,client,服务器,IP,地址,命令举例:,client 192.168.0.1,说明:上面设要给,IP,地址为,192.168.0.1,、端口号为,5050,的服务器发送数据,*,/,#include,#include,/,将,ws2_32.lib,库加入到工程中进行编译,#,pragma,comment(lib,ws2_32.lib),/,服务器端口号为,5050,#define DEFAULT_PORT 5050,/,缓冲区长度,#define DATA_BUFFER 1024,客户端代码,void,main(int,argc,char,*,argv,),WSADATA,wsaData,;,SOCKET,sClient,;,int,iPort,=5050;,/,服务器地址长度,int,iLen,;,/,接收数据的缓冲,int,iSend,;,int,iRecv,;,/,要发送给服务器的信息,char,send_buf,=Hello!I am a client.;,/,接收数据的缓冲区,char,recv_bufDATA_BUFFER,;,/,服务器端地址,struct,sockaddr_in,ser;,/,处理命令行中输入的参数,if(argc,2),/,提示在命令行中输入服务器,IP,地址,printf(Usage:client,server IP addressn);,return;,客户端代码,/,接收数据的缓冲区初始化,memset(recv_buf,0,sizeof(recv_buf);,if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0),printf(Failed,to load Winsock.n);,return;,/,建立服务器端地址,ser.sin_family,=AF_INET;,ser.sin_port,=,htons(iPort,);,ser.sin_addr.s_addr,=inet_addr(argv1);,/,建立客户端数据报套接口,sClient,=socket(AF_INET,SOCK_DGRAM,0);,if(sClient,=INVALID_SOCKET),printf(socket,(),Failed:%dn,WSAGetLastError,();,return;,iLen,=,sizeof(ser,);,客户端代码,/,向服务器发送数据,iSend,=sendto(sClient,send_buf,sizeof(send_buf),0,(,struct,sockaddr,*)&,ser,iLen,);,if(iSend,=SOCKET_ERROR),printf(sendto,(),Failed:%dn,WSAGetLastError,();,return;,else,if(iSend,=0),return;,else,printf(snedto,()succeeded.n);,客户端代码,/,从服务器接收数据,iRecv,=recvfrom(sClient,recv_buf,sizeof(recv_buf),0,(,struct,sockaddr,*)&,ser,&iLen,);,if(iRecv,=SOCKET_ERROR),printf(recvfrom,(),Failed.:%dn,WSAGetLastError,();,return;,else,if(iRecv,=0),return;,else,/,显示从服务器收到的信息,printf(recvfrom,():%,sn,recv_buf,);,printf(-n,);,closesocket(sClient,);,WSACleanup,();,服务器端代码,/*,调试环境:,VC+6.0,程序名称:,server.cpp,服务器,IP,地址:由系统指定,服务器端口:,5050,功能:从端口,5050,接收客户端发送来的数据,接收成功后显示从客户端收到的数据、客户端的,IP,地址和端口号;,给客户端发送,Hello!I,am a server.,字符串,命令格式:,server,*/,#include,#include,#include,#,pragma,comment(lib,ws2_32.lib),/,服务器端口号为,5050,#define DEFAULT_PORT 5050,/,接收数据缓冲区长度,#define BUFFER_LENGTH 1024,服务器端代码,void main(),int,iPort,=DEFAULT_PORT;,WSADATA,wsaData,;,SOCKET,sSocket,;,/,客户地址长度,int,iLen,;,/,发送的数据长度,int,iSend,;,/,接收的数据长度,int,iRecv,;,/,要发送给客户的信息,char,send_buf,=Hello!I am a server.;,/,接收数据的缓冲区,char,recv_bufBUFFER_LENGTH,;,/,本地地址和客户地址,struct,sockaddr_in,ser,cli,;,服务器端代码,printf(-n,);,printf(Server,waitingn);,printf(-n,);,if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0),printf(Failed,to load Winsock.n);,return;,/,产生服务器端套接口,sSocket,=socket(AF_INET,SOCK_DGRAM,0);,if(sSocket,=INVALID_SOCKET),printf(socket,()Failed:%,dn,WSAGetLastError,();,return;,服务器端代码,/,以下建立服务器端地址,ser.sin_family,=AF_INET;,/,htons,(),函数把一个双字节主机字节顺序的数转换为网络字节顺序的数,ser.sin_port,=,htons(iPort,);,/,htonl,(),函数把一个主机字节顺序的数转换为网络字节顺序的数,ser.sin_addr.s_addr,=,htonl(INADDR_ANY,);,if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser,)=SOCKET_ERROR),printf(bind,()Failed:%,dn,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,(),Failed.:%dn,WSAGetLastError,();,break;,else,if(iRecv,=0),break;,else,/,输出接收到的数据,printf(recvfrom,():%,sn,recv_buf,);,/输出客户IP地址和端口号,printf(Accepted,client,IP:%s,port:%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,(),Failed.:%dn,WSAGetLastError,();,printf(-n,);,break;,else,if(iSend,=0),break;,else,printf(sendto,()succeeded!n);,printf(-n,);,closesocket(sSocket,);,WSACleanup,();,程序改进,改进一、客户端和服务器端传输从各自键盘输入的内容,改进二、实现客户端和服务器端的多次交互传输,改进三、将程序由客户端服务器端模式改为对等模式,
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 百科休闲 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服