ImageVerifierCode 换一换
格式:DOCX , 页数:17 ,大小:39.88KB ,
资源ID:16307810      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/16307810.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(服务器回射程序设计文档格式.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

服务器回射程序设计文档格式.docx

1、 int quit(SOCKET s); SOCKET tcp_server(ULONG uIP,USHORT uPort); SOCKET tcp_server(char *hname,char *sname); SOCKET tcp_client(char *hname,char *sname); SOCKET tcp_client(ULONG uIP,USHORT uPort);int CSocketFrame:start_up(void) WORD wVersionRequested; WSADATA wsaData; int iResult; wVersionRequested=MA

2、KEWORD(2,2); iResult=WSAStartup(wVersionRequested,&wsaData); if(iResult!=0) printf(WSAStartup 调用错误,错误号:%dn,WSAGetLastError(); return -1; /* if(LOBYTE(wsaData.wVersion!=2|HIBYTE(wsaData.wVersion)!=2)无法找到可用的WSD版本n); WSACleanup(); /告诉用户无法找到可用的WSD elseWS2.2初始化成功!n */ return 0;clean_up(void) int iResult;

3、 iResult=WSACleanup(); if(iResult=SOCKET_ERROR) /WSACleanup()调用失败 WSACleanup 调用错误,错误号: elseWinsocket dll释放成功!) ; return 0;set_address(char *hname,char *sname,struct sockaddr_in *sap,char *protocol) struct servent *sp; struct hostent *hp; char *endptr; unsigned short port; unsigned long ulAddr=INADDR

4、_NONE; /将地址结构socketsddr_in初始化为0,并将地址族设为AF_INET memset(sap,0,sizeof(*sap); sap-sin_family=AF_INET; if(hname!=NULL) /如果hname不为空,转化地址格式 ulAddr=inet_addr(hname); if(ulAddr=INADDR_NONE|ulAddr=INADDR_ANY) /调用错误,调用gethostbyname获得主机地址 hp=gethostbyname(hname); if(hp=NULL) printf(未知的主机名,错误号: return -1; sap-si

5、n_addr=*(struct in_addr *)hp-h_addr;sin_addr.S_un.S_addr=ulAddr; /如果调用者没有指明一个主机名或地址,则设为通配地址 sap-sin_addr.s_addr=htonl(INADDR_ANY); /尝试转换sname为一个整数 port=(unsigned short)strtol(sname,&endptr,0); if(*endptr=0) /如果成功转化为网络字节序sin_port=htons(port); /如果失败,则假定是一个服务名称,通过getservbyname()函数获得端口号 sp=getservbyname

6、(sname,protocol); if(sp=NULL)未知服务,错误号: sin_port=sp-s_port;quit(SOCKET s) int iResult=0; iResult=closesocket(s); printf(closesocket 调用错误,错误号: iResult=clean_up(); return iResult;SOCKET CSocketFrame:tcp_server(char *hname,char *sname) SOCKET ListenSocket; sockaddr_in local; const int on=1; /为服务器的本机地址设置

7、用户输入的地址以及端口号 if(set_address(hname,sname,&local,(char*)tcp)! return -1; /创建套接字 ListenSocket=socket(AF_INET,SOCK_STREAM,0); if(ListenSocket=INVALID_SOCKET)socket函数调用错误,错误号: WSACleanup(); return -1; /绑定服务器地址 iResult=bind(ListenSocket,(struct sockaddr *) & local,sizeof(local); if(iResult=-1)bind函数调用错误!错

8、误号: closesocket(ListenSocket); /设置函数为监听状态,监听队列长度为NLISTEN iResult=listen(ListenSocket,SOMAXCONN);Listen函数调用错误! quit(ListenSocket); return ListenSocket;tcp_server(ULONG uIP,USHORT uPort) SOCKET ListenSocket=INVALID_SOCKET; memset(&local,0,sizeof(local); local.sin_family=AF_INET; local.sin_addr.S_un.S_

9、addr=htonl(uIP); local.sin_port=htons(uPort); clean_up();tcp_client(char *hname,char *sname) struct sockaddr_in peer; SOCKET ClientSocket; /为服务器的地址peer设置用户输入的地址以及端口号peer,(char *) ClientSocket=socket(AF_INET,SOCK_STREAM,0); if(ClientSocket=INVALID_SOCKET) /请求建立连接 iResult=connect(ClientSocket,(struct

10、sockaddr *) & peer,sizeof(peer);connect函数调用错误! quit(ClientSocket); return ClientSocket;tcp_client(ULONG uIP,USHORT uPort)peer,0,sizeof(peer); peer.sin_family=AF_INET; peer.sin_addr.S_un.S_addr=htonl(uIP); peer.sin_port=htons(uPort);服务器代码设计:#define MAXLINE 10000#define ECHOPORT 7210int tcp_server_fun

11、_echo(SOCKET s) int iResult = 0; char recvlineMAXLINE; do memset(recvline, 0, MAXLINE); /接收数据 iResult = recv(s, recvline, MAXLINE, 0); if (iResult 0)服务器接收到数据:%sn, recvline); /回射程序已经收到的数据 iResult = send(s, recvline, iResult, 0); if (iResult = SOCKET_ERROR)send 函数调用错误,错误号:%ldn, WSAGetLastError(); iRes

12、ult = -1; else服务器发送数据%sn if (iResult = 0)对方连接关闭,退出nrecv 函数调用错误,错误号: break; while (iResult 0);int main(int argc, char* argv) CSocketFrame frame; SOCKET ListenSocket, ConnectSocket; /输入参数合法性检查 if (argc != 1)usage:EchoTCPServer /初始化 frame.start_up(); /创建服务器的流式套接字并在指定端口号上监听 ListenSocket =frame.tcp_serve

13、r(char *)NULL,(char *)ECHOPORT); /改成全部任意 if (ListenSocket = -1) printf(服务器准备好回射服务。 for (; ConnectSocket = accept(ListenSocket, NULL, NULL); if (ConnectSocket != INVALID_SOCKET) /建立连接成功rn建立连接成功nn /回射 iResult = tcp_server_fun_echo(ConnectSocket); /如果出错,关闭当前连接的套接字,继续接受其他客户端的请求 if (iResult = -1)当前连接已关闭或

14、出错!accept 函数调用错误,错误号: frame.quit(ListenSocket); /关闭套接字 if (closesocket(ConnectSocket) = SOCKET_ERROR)closesocket 函数调用错误,错误号: frame.quit(ListenSocket);客户端代码设计:int tcp_client_fun_echo(FILE *fp,SOCKET s) char sendlineMAXLINE,recvlineMAXLINE; /初始化缓冲区 memset(sendline,0,MAXLINE); memset(recvline,0,MAXLINE

15、); /循环发送用户输入的数据,并接受服务器返回的应答,直到用户输入Q结束 while(fgets(sendline,MAXLINE,fp)! if(*sendline=Qinput end! /用户发送数据结束 iResult=shutdown(s,SD_SEND); if(iResult=SOCKET_ERROR)shutdown函数调用错误,错误号:%d return 0; iResult=send(s,sendline,strlen(sendline),0); if(iResult=SOCKET_ERROR)send函数调用错误,错误号:rn客户端发送数据:%srn,sendline)

16、; memset(recvline,0,MAXLINE); iResult=recv(s,recvline,MAXLINE,0); if(iResult0)客户端收到数据:,recvline); if(iResult=0)服务器终止!recv函数调用错误,错误号: memset(sendline,0,MAXLINE); int main(int argc,char *argv) if(argc!=2) */ /WSD初始化 /创建客户端的流式套接字连接成功,请输入回射字符串。 ClientSocket=frame.tcp_client(char *)argv1,(char *)ECHOPORT

17、); if(ClientSocket=-1) /开始回射请求的发送与接收 iResult=tcp_client_fun_echo(stdin,ClientSocket); frame.quit(ClientSocket);实验结果:我是在两台不同的电脑上做的实验,实验结果如下:服务器:客户端:【实验中出现问题及解决方法】1. 平台的问题因为自己是使用win10的,开始装上Visual Studio 2015出现了很多问题,比如库文件缺失,相关项目类型没有装的问题。解决方法:暂时使用DEV C+,然后自己对VS进行相关配置,已经差不多了,后续会尝试转移到VS平台。【思考问题】(自己在试验过程中想到的问题)1.如果服务器端口号设定为任意可不可以? 不可以,因为客户端会不知道服务器的端口。2.上述设计的服务器有没有考虑多个客户端的问题? 可以多个客户端同时连接成功,但是只有首先连入的那个可以与服务器进行通信!【实验体会】 因为涉及到网络操作结构类的构造,代码量比较大,当然很多在本节中并没有使用,但考虑到日后要进行使用,减少后续编程的工作量,在本次结构体设计中,对可能用到的基本操作进行了一次性的设计。但是后续的工作就进行的比较顺利。还是比较有自豪感的!因为参考了试验课本,以后仍需勤加练习,才能够更好地掌握流式套接字编程。成绩优良中及格不及格教师签名: 日期:

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1