天津理工大学计算机网络 实验二
实验
报告
软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载
学院(系)名称:计算机与通信
工程
路基工程安全技术交底工程项目施工成本控制工程量增项单年度零星工程技术标正投影法基本原理
学院
姓名 学号 专业 计算机科学与技术
班级 实验名称 实验二:基于TCP/UDP的Socket编程
课程名称 计算机网络 课程代码
7#219 实验时间 实验地点
批改意见 成绩
教师签字:
1. 实验目的
了解套接字(socket)实现原理。通过编成理解TCP、UDP原理,加深对传输层的功能理解。 2. 实验环境
Windows 7
3. 实验要求
请在以下
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
目中选择一个,按照要求完成实验,并完成实验报告。实验可以分组进行,每2人一组,在报告中注明每个成员的分工。编程可以使用任何高级语言,建议使用java或C++。 (1)基于TCP / UDP的socket编程
a) 利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。
要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。
b) 修改上述程序,实现服务器根据客户请求,将服务器端指定的文件可靠地传输给客户。如果
服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。 4. 实验过程记录(源程序、测试用例、测试结果及心得体会等)
源程序:
(1)服务端:
//server.cpp
#include
#include
#include
第1页 共6页
#include
#include
#pragma comment(lib, "WS2_32.lib ") using namespace std;
void OutErr(string msg)
{ cout << "错误~发生在 " < 0)
{
if(FD_ISSET(c,&fdread))
{
ReciveBytes=recv(c,data,10,0);
if(ReciveBytes==SOCKET_ERROR)
{
break;
}
cout << "收到字节数: "
< 0);
FD_CLR(c,&fdread);
closesocket(c);
return 0;
}
int main()
{
第2页 共6页
SOCKET server;
SOCKET client;
SOCKADDR_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((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(string( "listen "));
return 1;
}
while(1)
{
cliaddrLen=sizeof(SOCKADDR);
client=accept(server,(SOCKADDR *)&cli_addr,&cliaddrLen);
cout << "客户IP: " < 0)
{
if(FD_ISSET(client,&fdread))//c中是否属于fdread集合
{
do//循环读取,每次接收10个字符,直到把缓冲区中全部取完
{
ReciveBytes=recv(client,data,10,0);
if(ReciveBytes==SOCKET_ERROR)
{
//SOCKET错误
break;
}
data[ReciveBytes]=0;//加上结束符
cout << "收到 "
< 0);
}
}
}//while接收数据
if(Hnd==NULL)
{
CloseHandle(Hnd);
closesocket(client);
}
}
closesocket(server);
WSACleanup();
return 0;
}
第4页 共6页
客户端:
//client.cpp
#include
#include
#include
#pragma comment(lib, "ws2_32.lib ") using namespace std; void OutErr(string msg) {
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))==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;
第5页 共6页
if((SentBytes=send(c,msg.c_str(),msg.size(),0))==SOCKET_ERROR) {
OutErr(string( "send "));
break;
}
}while(1);
closesocket(c);
WSACleanup();
return 0;
}
测试结果:
心得体会:
通过这次的实验,巩固了我以前基础的java知识,了解Socket类与ServerSocket类的作用与用法,会
用一些Socket类与ServerSocket类的重要
方法
快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载
,初步了解java中用来实现客户端TCP操作Socket类,这
个类本身使用直接代码通过主机操作系统的本地TCP栈进行通信。
第6页 共6页