2019.3.16
报告文档:Echo实验.pdf
服务器把客户端发送来的任何消息都返回给客户端,返回的消息前面要加上服务器的当前时间。客户端把返回的消息显示出来。客户端每输入一条消息就建立 TCP 连接,并把消息发送给服务器,在收到服务器回应后关闭连接。
在任务一的基础上,服务器在收到客户端的消息时显示服务器的当前时间、客户端的IP地址、客户端的端口号和客户端发来的信息,并把它们一并返回给客户端。 客户端在发送消息后把服务器发回给它的消息显示出来。
提示:客户端程序与任务一同,不用修改
要求服务器直接从accept()的参数中得到客户端的IP地址和端口号。注:服务器获取IP地址后要求直接使用s_un_b的四个分量得到IP地址,不能使用函数inet_ntoa()转换IP地址。
修改UDP例程,完成Echo功能,即当客户端发来消息时,服务器显示出服务器的当前时间、客户端的IP、客户端的端口号和客户发来的信息,并把它们一并发回给客户端,客户端然后把它们显示出来。
服务器可以直接从recvfrom()的参数from中得到客户端的IP地址和端口号,并且服务器用sendto()发回给客户端消息时可以直接用该参数from作为参数toAddr。可以使用inet_ntoa()转换客户端IP地址。
客户端程序的recvfrom()可以直接使用原来sendto使用的sock。该sock已经绑定了客户端的IP地址和端口号,客户端可以直接用来接收数据。
src
│
├───TCP
│ ├───可执行文件
│ │ TcpEcho_Client.exe
│ │ TcpEcho_Server.exe
│ │ TcpEcho_Server_Enhanced.exe
│ │
│ └───源码
│ TcpEcho_Client.c
│ TcpEcho_Server.c
│ TcpEcho_Server_Enhanced.cpp
│
└───UDP
├───可执行文件
│ UdpEcho_Client.exe
│ UdpEcho_Server.exe
│
└───源码
UdpEcho_Client.c
UdpEcho_Server.cpp
WSAStartup()/socket();bind();listen();accept();send()/recv();closesocket()/WSACleanup()。WSAStartup()/socket();connect();send()/recv();closesocket()/WSACleanup()。与 TCP 类似,不过 UDP 不需要建立连接(accept()/connect())。
发送函数为sendto(),接收函数为recvfrom()。