天津理工大学计算机网络 实验二
实验报告
学院(系)名称:计算机与通信工程学院
姓名学号专业计算机科学与技术班级实验名称实验二:基于TCP/UDP的Socket编程#219批改意见成绩
教师签字: 1. 实验目的
(socket)实现原理。
2. 实验Windows 7
3. 实验要求
利用Java或C++语言,分别基于TCP和UDP编写一个简单的Client/Server网络应用程序。要求实现客户向服务器传输任意一个字符串,服务器将收到的字符串变换成大写后传回客户。
修改上述程序,实现服务器根据客户请求,将服务器端指定的文件可靠地传输给客户。如果服务器没有指定的文件,服务器将给客户返回一个信息,通知客户其请求文件不存在。
4. 实验过程记录(源程序、测试用例、测试结果及心得体会等)
源程序://server.cpp
#include
#include
#include
#include
#include
#pragma comment(lib, "WS2_32.lib ")
using namespace std;
void OutErr(string msg)
{ cout << "错误!发生在 " <
fd_set fdread;
int ret;
DWORD WINAPI ThreadProc(LPVOID lpParameter)
{
SOCKET c=(SOCKET)lpParameter;
char data[80];
UINT ReciveBytes=0;
FD_ZERO(&fdread);
FD_SET(c,&fdread);
do
{
if((ret=select(0,&fdread,NULL,NULL,NULL))==SOCKET_ERROR)
{
OutErr(string( "select "));
break;
}
if(ret> 0)
{
if(FD_ISSET(c,&fdread))
{
ReciveBytes=recv(c,data,10,0);
if(ReciveBytes==SOCKET_ERROR)
{
break;
}
cout << "收到字节数: "
<
<
data[ReciveBytes]= '\0 ';
cout <
}
}
}while(ReciveBytes> 0);
FD_CLR(c,&fdread);
closesocket(c);
return 0;
}
int main()
{
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)
{