服务器回射程序设计

上传人:大米 文档编号:563741318 上传时间:2023-03-28 格式:DOCX 页数:11 大小:123.94KB
返回 下载 相关 举报
服务器回射程序设计_第1页
第1页 / 共11页
服务器回射程序设计_第2页
第2页 / 共11页
服务器回射程序设计_第3页
第3页 / 共11页
服务器回射程序设计_第4页
第4页 / 共11页
服务器回射程序设计_第5页
第5页 / 共11页
点击查看更多>>
资源描述

《服务器回射程序设计》由会员分享,可在线阅读,更多相关《服务器回射程序设计(11页珍藏版)》请在金锄头文库上搜索。

1、网络编程技术实验报告实验名称实验四基于数据报套接字的回射程序设计与实验队别姓名学号实验日期实验报告要求:1.实验目的2.实验要求3.实验环境4.实验作业5.问题及解决6.思考问题7.实验体会【实验目的】1.巩固套接字编程2.熟悉流式套接字编程【实验要求】使用流式套接字编程实现回射程序,具体包括:1.输出显示。2.服务器:在指定端口上提供服务,接收客户端的发送的回射请求字符串,将接收到的内容回射给客户端,输出显示。3.提炼出网络操作的基本功能,构造网络操作类,修改原有程序【实验环境】DEVC+【实验作业】网络操作类设计:classCSocketFramepublic:intstart_up();

2、intclean_up();intset_address(char*hname,char*sname,structsockaddr_in*sap,char*protocol);intquit(SOCKETs);SOCKETtcp_server(ULONGuIP,USHORTuPort);SOCKETtcp_server(char*hname,char*sname);SOCKETtcp_client(char*hname,char*sname);SOCKETtcp_client(ULONGuIP,USHORTuPort);intCSocketFrame:start_up(void)WORDwVe

3、rsionRequested;WSADATAwsaData;intiResult;wVersionRequested=MAKEWORD(2,2);iResult=WSAStartup(wVersionRequested,&wsaData);if(iResult!=0)printf(WSAStartup调用错误,错误号:%dn,WSAGetLastError();return-1;客户端:主动请求建立连接,接收界面输入字符串,发送数据给服务器,接收服务器返回的应答,/*if(LOBYTE(wsaData.wVersion!=2|HIBYTE(wsaData.wVersion)!=2)printf

4、(无法找到可用的WSD版本n);WSACleanup();return-1;/告诉用户无法找到可用的WSDelseprintf(WS2.2初始化成功!n);*/return0;intCSocketFrame:clean_up(void)intiResult;iResult=WSACleanup();if(iResult=SOCKET_ERROR)/WSACleanup()调用失败printf(WSACleanup调用错误,错误号:%dn,WSAGetLastError();return-1;elseprintf(Winsocketdll释放成功!n);return0;intCSocketFra

5、me:set_address(char*hname,char*sname,structsockaddr_in*sap,char*protocol)structservent*sp;structhostent*hp;char*endptr;unsignedshortport;unsignedlongulAddr=INADDR_NONE;/将地址结构socketsddr_in初始化为0,并将地址族设为AF_INETmemset(sap,0,sizeof(*sap);sap-sin_family=AF_INET;if(hname!=NULL)/如果hname不为空,转化地址格式ulAddr=inet

6、_addr(hname);if(ulAddr=INADDR_NONE|ulAddr=INADDR_ANY)/调用错误,调用gethostbyname获得主机地址hp=gethostbyname(hname);if(hp=NULL)printf(未知的主机名,错误号:%dn,WSAGetLastError();return-1;sap-sin_addr=*(structin_addr*)hp-h_addr;elsesap-sin_addr.S_un.S_addr=ulAddr;else/如果调用者没有指明一个主机名或地址,则设为通配地址sap-sin_addr.s_addr=htonl(INAD

7、DR_ANY);/尝试转换sname为一个整数port=(unsignedshort)strtol(sname,&endptr,0);if(*endptr=0)/如果成功转化为网络字节序sap-sin_port=htons(port);else/如果失败,则假定是一个服务名称,通过getservbyname()函数获得端口号sp=getservbyname(sname,protocol);if(sp=NULL)printf(未知服务,错误号:%dn,WSAGetLastError();return-1;sap-sin_port=sp-s_port;return0;intCSocketFrame

8、:quit(SOCKETs)intiResult=0;iResult=closesocket(s);if(iResult=SOCKET_ERROR)printf(closesocket调用错误,错误号:%dn,WSAGetLastError();return-1;iResult=clean_up();returniResult;SOCKETCSocketFrame:tcp_server(char*hname,char*sname)SOCKETListenSocket;intiResult=0;sockaddr_inlocal;constinton=1;/为服务器的本机地址设置用户输入的地址以及

9、端口号if(set_address(hname,sname,&local,(char*)tcp)!=0)return-1;/创建套接字ListenSocket=socket(AF_INET,SOCK_STREAM,0);if(ListenSocket=INVALID_SOCKET)printf(socket函数调用错误,错误号:%dn,WSAGetLastError();WSACleanup();return-1;/绑定服务器地址iResult=bind(ListenSocket,(structsockaddr*)&local,sizeof(local);if(iResult=-1)print

10、f(bind函数调用错误!错误号:%dn,WSAGetLastError();closesocket(ListenSocket);WSACleanup();return-1;/设置函数为监听状态,监听队列长度为NLISTENiResult=listen(ListenSocket,SOMAXCONN);if(iResult=SOCKET_ERROR)printf(Listen函数调用错误!错误号:%dn,WSAGetLastError();quit(ListenSocket);return-1;returnListenSocket;SOCKETCSocketFrame:tcp_server(UL

11、ONGuIP,USHORTuPort)SOCKETListenSocket=INVALID_SOCKET;intiResult=0;sockaddr_inlocal;constinton=1;/为服务器的本机地址设置用户输入的地址以及端口号memset(&local,0,sizeof(local);local.sin_family=AF_INET;local.sin_addr.S_un.S_addr=htonl(uIP);local.sin_port=htons(uPort);ListenSocket=socket(AF_INET,SOCK_STREAM,0);if(ListenSocket=

12、INVALID_SOCKET)printf(socket函数调用错误,错误号:%dn,WSAGetLastError();clean_up();return-1;/绑定服务器地址iResult=bind(ListenSocket,(structsockaddr*)&local,sizeof(local);if(iResult=SOCKET_ERROR)printf(bind函数调用错误!错误号:%dn,WSAGetLastError();quit(ListenSocket);return-1;/设置函数为监听状态,监听队列长度为NLISTENiResult=listen(ListenSocke

13、t,SOMAXCONN);if(iResult=SOCKET_ERROR)printf(Listen函数调用错误!错误号:%dn,WSAGetLastError();quit(ListenSocket);return-1;returnListenSocket;SOCKETCSocketFrame:tcp_client(char*hname,char*sname)intiResult=0;structsockaddr_inpeer;SOCKETClientSocket;/为服务器的地址peer设置用户输入的地址以及端口号if(set_address(hname,sname,&peer,(char*)tcp)!=0)return-1;/创建套接字ClientSocket=socket(AF_INET,SOCK_STREAM,0);if(ClientSocket=INVALID_SOCKET)printf(socket函数调用错误,错误号:%dn,WSAGetLastError();clean_up();return-1;/请求建立连接iResult=connect(ClientSocket,(structsockaddr*)&peer,sizeof(peer);if(iResult=SOCKET

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 试题/考题 > 初中试题/考题

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号