天津理工大学计算机网络实验二

上传人:公**** 文档编号:564423547 上传时间:2023-08-04 格式:DOC 页数:7 大小:238.51KB
返回 下载 相关 举报
天津理工大学计算机网络实验二_第1页
第1页 / 共7页
天津理工大学计算机网络实验二_第2页
第2页 / 共7页
天津理工大学计算机网络实验二_第3页
第3页 / 共7页
天津理工大学计算机网络实验二_第4页
第4页 / 共7页
天津理工大学计算机网络实验二_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《天津理工大学计算机网络实验二》由会员分享,可在线阅读,更多相关《天津理工大学计算机网络实验二(7页珍藏版)》请在金锄头文库上搜索。

1、实验报告学院(系)名称:计算机与通信工程学院姓名学号专业计算机科学与技术班级实验名称实验二:基于TCP/UDP的Socket编程课程名称计算机网络课程代码实验时间实验地点7#219批改意见成绩教师签字: 1. 实验目的了解套接字(socket)实现原理。通过编成理解TCP、UDP原理,加深对传输层的功能理解。2. 实验环境Windows 73. 实验要求请在以下题目中选择一个,按照要求完成实验,并完成实验报告。实验可以分组进行,每2人一组,在报告中注明每个成员的分工。编程可以使用任何高级语言,建议使用java或C+。(1)基于TCP / UDP的socket编程a) 利用Java或C+语言,分

2、别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。b) 修改上述程序,实现服务器根据客户请求,将服务器端指定的文件可靠地传输给客户。如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。4. 实验过程记录(源程序、测试用例、测试结果及心得体会等)源程序:(1)服务端:/server.cpp #include #include #include #include #include #pragma comment(lib, WS2_32.lib ) using nam

3、espace std; void OutErr(string msg) cout 错误!发生在 msg 0) if(FD_ISSET(c,&fdread) ReciveBytes=recv(c,data,10,0); if(ReciveBytes=SOCKET_ERROR) break; cout 收到字节数: ReciveBytes endl; dataReciveBytes= 0 ; cout data 0); FD_CLR(c,&fdread); closesocket(c); return 0; int main() SOCKET server; SOCKET client; SOCK

4、ADDR_IN ser_addr,cli_addr; WSADATA wdata; int cliaddrLen=0; UINT port=4000; HANDLE Hnd; DWORD dwThreadID; if(WSAStartup(MAKEWORD(2,0),&wdata)!=0) OutErr(string( WSAStartup ); return 1; ser_addr.sin_addr.S_un.S_addr=inet_addr( 0.0.0.0 ); ser_addr.sin_family=AF_INET; ser_addr.sin_port=htons(port); /if

5、(server=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,1)=INVALID_SOCKET) if(server=socket(AF_INET,SOCK_STREAM,IPPROTO_IP)=INVALID_SOCKET) OutErr(string( WSASocket ); return 1; if(bind(server,(SOCKADDR *)&ser_addr,sizeof(SOCKADDR)!=0) OutErr(string( bind ); return 1; if(listen(server,5)!=0) OutErr(

6、string( listen ); return 1; while(1) cliaddrLen=sizeof(SOCKADDR); client=accept(server,(SOCKADDR *)&cli_addr,&cliaddrLen); cout 客户IP: inet_ntoa(cli_addr.sin_addr) ,端口: ntohs(cli_addr.sin_port) 0) if(FD_ISSET(client,&fdread)/c中是否属于fdread集合 do/循环读取,每次接收10个字符,直到把缓冲区中全部取完 ReciveBytes=recv(client,data,10

7、,0); if(ReciveBytes=SOCKET_ERROR) /SOCKET错误 break; dataReciveBytes=0;/加上结束符 cout 收到 ReciveBytes 个字节:n data 0); /while接收数据 if(Hnd=NULL) CloseHandle(Hnd); closesocket(client); closesocket(server); WSACleanup(); return 0; 客户端:/client.cpp #include #include #include #pragma comment(lib, ws2_32.lib ) usin

8、g namespace std; void OutErr(string msg) cout 错误发生: msg endl; int main() SOCKET c; SOCKADDR_IN server_addr; WSADATA wsd; string msg; string remote_ip; cout remote_ip; if(WSAStartup(MAKEWORD(2,2),&wsd)!=0) OutErr(string( WSAStartup ); return 1; if(c=WSASocket(AF_INET,SOCK_STREAM,IPPROTO_IP,NULL,0,1)=

9、INVALID_SOCKET) OutErr(string( WSASocket ); return 1; server_addr.sin_addr.S_un.S_addr=inet_addr(remote_ip.c_str(); server_addr.sin_family=AF_INET; server_addr.sin_port=htons(4000); if(connect(c,(SOCKADDR *)&server_addr,sizeof(SOCKADDR_IN)!=0) OutErr(string( connect ); return 1; do int SentBytes; cin msg; if(msg= exit )break; if(SentBytes=send(c,msg.c_str(),msg.size(),0)=SOCKET_ERROR) OutErr(string( send ); break; while(1); closesocket(c); WSACleanup(); return 0; 测试结果:心得体会:通

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

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

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