《tcpip实验报告》由会员分享,可在线阅读,更多相关《tcpip实验报告(21页珍藏版)》请在金锄头文库上搜索。
1、TCP/IP 技术实验报告书专 业: 通 信 工 程学生姓名:张 世 超完成时间:2018 年 2 月 5 日实验一 网络应用程序基础实验目的:通过实验,使学生熟悉并掌握运用 TCP/IP 技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用 VC+为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。实验内容:1,Winsock 的启动与终止。2,Winsock 的创建及绑定和关闭。3,建立通信连接 listen 及 accept 和 connect。4,数据的传输。5,简单的客户机/服务器之间的通信。要求:通过在 SDK 模式下完成数
2、据通信的过程,掌握 Windows Socket 的常用函数的形式和使用方法,理解数据通信的过程。实验步骤:1,打开 VC 环境1,使用向导为客户端创建工程:选择可执行程序,选择使用 wsa 环境,单文档环境,其他的选择默认设置2,在文件中添加代码3,编译调试4,使用向导为服务器端创建工程:选择可执行程序,选择使用 wsa 环境,单文档环境,其他的选择默认设置5,在文件中添加代码6,编译调试7,分别打开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。8,在客户端侧输入字符,可以看到服务器收到字符串参考代码:课本 156 页-160 页实验结果:Client:#include#incl
3、ude/服务器端口号为 5050#define DEFAULT_PORT 5050#define DATA_BUFFER 1024void main(int argc,char *argv)WSADATA wsaData;SOCKET sClient;int iPort=DEFAULT_PORT;/从服务器端接收的数据长度int iLen;/接收数据的缓冲char bufDATA_BUFFER;/服务器端地址struct sockaddr_in ser;/判断输入的参数是否正确if(argc#include#include#pragma comment(lib,ws2_32.lib)/服务器使
4、用的端口号为 5050#define DEFAULT_PORT 5050void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sListen,sAccept;/客户端地址长度int iLen;/发送的数据长度int iSend;/要发送给客户端的信息char buf=I am a server.;/服务器和客户端的 IP 地址struct sockaddr_in ser,cli;printf(-n);printf(Server waitingn);printf(-n);if(WSAStartup(MAKEWORD(2,2),&wsaD
5、ata)!=0)printf(Failed to load Winsock.n);return;/创建服务器端套接口sListen=socket(AF_INET,SOCK_STREAM,0);if(sListen=INVALID_SOCKET)printf(socket() Failed:%dn,WSAGetLastError();return;/以下建立服务器端地址ser.sin_family=AF_INET;/htons()函数把一个双字节的主机直接顺序的数据转换为网络直接顺序的数ser.sin_port=htons(iPort);/htonl()函数把一个四字节的主机直接顺序的数据转换为
6、网络直接顺序的数/使用系统制定的 IP 地址 INADDR_ANYser.sin_addr.s_addr=htonl(INADDR_ANY);if(bind(sListen,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf(bind() Failed: %dn,WSAGetLastError();return;/进入监听状态if(listen(sListen,5)=SOCKET_ERROR)printf(listen() Failed:%dn,WSAGetLastError();return;/初始化客户端地址长度参数iLen=sizeof(cl
7、i);/进入一个无限循环,等待客户的连接请求while(1)sAccept=accept(sListen,(struct sockaddr*)if(sAccept=INVALID_SOCKET)printf(accept() Failed: %dn,WSAGetLastError();break;/输出客户 IP 地址和端口号printf(Accepted client IP:%s,port:%dn,inet_ntoa(cli.sin_addr),ntohs(cli.sin_port);/给建立连接的客户发送信息iSend=send(sAccept,buf,sizeof(buf),0);if(
8、iSend=SOCKET_ERROR)printf(send() Failed: %dn,WSAGetLastError();break;else if(iSend=0)break;elseprintf(send() byte:%dn,iSend);printf(-n);closesocket(sAccept);closesocket(sListen);WSACleanup();实验截图:实验二 基于 TCP 协议的客户/服务器通信程序实验目的:通过实验,使学生熟悉并掌握运用 TCP/IP 技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用 VC+为开发
9、工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。实验内容:1,主机间 TCP 的性能测试之一:回程时延。2,服务器端能从客户端接收数据并立即将接收到的数据原样返回给客户方。3,客户端能往服务器端发送数据,然后立即接受从服务器端原样返回的数据。理解 TCP 通信程序设计过程,并结合特定应用场景(如创建留言板程序、创建多客户端服务器/客户通信程序等)完成程序开发。掌握 TCP 服务器程序和客户程序的创建过程,熟悉单播通信程序中用到的 Winsock 接口,培养学生将所学知识进行灵活运用的能力。实验步骤:1,打开 VC 环境2,使用向导为客户端创建工程:选择可执行程序,选择使用 w
10、sa 环境,单文档环境,其他的选择默认设置3,在文件中添加代码4,编译调试5,使用向导为服务器端创建工程:选择可执行程序,选择使用 wsa 环境,单文档环境,其他的选择默认设置6,在文件中添加代码7,编译调试8,分别打开两个系统命令窗口中,并分别在其中运行客户端和服务器端程序。9,在客户端着输入字符,可以看到服务器收到字符串注:可以再实验一的代码上修改,自己增加额外的功能,比如取系统时间,计算往返时间等作完之后,修改通信代码使用 UDP 来实现网络通信实验结果:Client:#include#include#include#define DEFAULT_PORT 5050#define DAT
11、A_BUFFER 1024#pragma comment(lib,WS2_32.lib)void main(int argc,char* argv)WSADATA wsaData;SOCKET sClient;int iPort=5050;int iLen;int isend,iRecv;char send_buf=Hello! I am a client;char recv_bufDATA_BUFFER;struct sockaddr_in ser;if(argc#include#include#define DEFAULT_PORT 5050#define BUFFER_LENGTH 10
12、24#pragma comment(lib,WS2_32.lib)void main()int iPort=DEFAULT_PORT;WSADATA wsaData;SOCKET sSocket;int iLen,iRecv,iSend;struct sockaddr_in ser,cli;char send_buf=Hollo!I am a server;char recv_bufBUFFER_LENGTH;printf(-);printf(Server waiting);printf(-);if(WSAStartup(MAKEWORD(2,2),&wsaData)!=0)printf(环境
13、初始化错误:n);return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(socket()函数调用失败:n,WSAGetLastError();return;ser.sin_family=AF_INET;ser.sin_port=htons(iPort);ser.sin_addr.s_addr=htonl(INADDR_ANY); if(bind(sSocket,(LPSOCKADDR)&ser,sizeof(ser)=SOCKET_ERROR)printf(bind()函数调用失败:n,WSAG
14、etLastError();return;iLen=sizeof(cli);memset(recv_buf,0,sizeof(recv_buf);while(1)iRecv=recvfrom(sSocket,recv_buf,BUFFER_LENGTH,0,(SOCKADDR*)if(iRecv=SOCKET_ERROR)printf(recvfrom()函数调用失败:n,WSAGetLastError();break;else if(iRecv=0) break;else printf(recvfrom():%dn,recv_buf);printf(客户端的 IP 地址、端口号:%dn,in
15、et_ntoa(cli.sin_addr),ntohs(cli.sin_port);iSend=sendto(sSocket,send_buf,sizeof(send_buf),0,(SOCKADDR*)&cli,sizeof(cli);if(iSend=SOCKET_ERROR)printf(sendto()函数调用失败:n,WSAGetLastError();break;else if(iSend=0) break;else printf(sendto():调用成功!n);closesocket(sSocket);WSACleanup();实验截图:实验三 简易聊天系统的实现实验目的:通过实验,使学生熟悉并掌握运用 TCP/IP 技术进行网络编程的基本知识,加深对课堂教学内容的理解,掌握套接字网络通信编程技术,能够运用 VC+为开发工具编程解决网络通信中的实际问题,进行一些简单的网络应用程序设计。实验内容:设计实现包括客户端和