东北大学计算机网络实验报告.doc_第1页
东北大学计算机网络实验报告.doc_第2页
东北大学计算机网络实验报告.doc_第3页
东北大学计算机网络实验报告.doc_第4页
东北大学计算机网络实验报告.doc_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

计算机网络实验报告 实验名称Tcp与Udp的通信实现班 级 软信1101 学 号20112329姓 名杜海涛日 期 2013-7-13成 绩评 阅 人软件学院一、 实验目的与意义1、编写Tcp服务器与客户端程序,服务器程序在客户端连接后输出客户端信息(IP,端口号)2、编写Tcp服务器与客户端程序,客户端在连接后可从键盘输入字符,在服务器端实时显3、在2的基础上,服务器判断接收到的字符,如是某指定字符,则服务器退出监听4、编写基于Udp的控制台聊天程序通过tcp和udp的编程实现windows环境下的进程间的通信。二、 实验环境操作系统:Windows 7实验环境:Microsoft Visual C+6.0三、 实验的预习内容传输控制协议TCP(Transport Control Protocol)是一种面向连接的,可靠的传输层协议。面向连接是指一次正常的TCP传输需要通过在TCP客户端和TCP服务端建立特定的虚电路连接来完成,该过程通常被称为“三次握手”。举例说明,TCP客户端需要和TCP服务端建立连接,过程如图所示 第一步中,客户端向服务端提出连接请求。这时TCP SYN标志置位。客户端告诉服务端序列号区域合法,需要检查。客户端在TCP报头的序列号区中插入自己的ISN。服务端收到该TCP分段后,在第二步以自己的ISN回应(SYN标志置位),同时确认收到客户端的第一个TCP分段(ACK标志置位)。在第三步中,客户端确认收到服务端的ISN(ACK标志置位)。到此为止建立完整的TCP连接,开始全双工模式的数据传输过程。 UDP(User Datagram Protocol),即用户数据报协议。它属于“面向无连接的不可靠的传输”的类型。UDP中,每个数据包称为“数据报”,它的包头只包含4个域,主要是地址信息与包的长度和校验信息。与此对应,TCP包的头信息有10多个域。因此UDP的网络开销一般要小于TCP。由于UDP在传送数据过程中没有建立连接,也不进行检查,因此UDP是不可靠的,它不能保证数据报能安全无误地到达目的主机。四、 实验的步骤与调试方法程序的流程图UDP协议下实验:程序流程图:五、 实验数据与实验结果TcpclientTcperverUdp clientUdp server六、 实验用程序清单(要有注释)TCPSERVER:/ Module Name: tcpserver.cpp#include #include #pragma comment(lib, ws2_32.lib)void main(void) WSADATA wsaData; SOCKET ListeningSocket; SOCKET NewConnection; SOCKADDR_IN ServerAddr; SOCKADDR_IN ClientAddr; int ClientAddrLen; int Port = 5150; int Ret; char DataBuffer1024; / Initialize Winsock version 2.2 if (Ret = WSAStartup(MAKEWORD(2,2), &wsaData) != 0) printf(WSAStartup failed with error %dn, Ret); return; / Create a new socket to listening for client connections. if (ListeningSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = INVALID_SOCKET) printf(socket failed with error %dn, WSAGetLastError(); WSACleanup(); return; ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(Port); ServerAddr.sin_addr.s_addr = htonl(INADDR_ANY); / Associate the address information with the socket using bind. if (bind(ListeningSocket, (SOCKADDR *)&ServerAddr, sizeof(ServerAddr) = SOCKET_ERROR) printf(bind failed with error %dn, WSAGetLastError(); closesocket(ListeningSocket); WSACleanup(); return; / Listen for client connections. We used a backlog of 5 which is / normal for many applications. if (listen(ListeningSocket, 5) = SOCKET_ERROR) printf(listen failed with error %dn, WSAGetLastError(); closesocket(ListeningSocket); WSACleanup(); return; printf(等待客户端连接端口 %d.n, Port); / Accept a new connection when one arrives. ClientAddrLen = sizeof(ClientAddr); if (NewConnection = accept(ListeningSocket, (SOCKADDR *) &ClientAddr, &ClientAddrLen) = INVALID_SOCKET) printf(accept failed with error %dn, WSAGetLastError(); closesocket(ListeningSocket); WSACleanup(); return; printf(成功建立连接 %sn, inet_ntoa(ClientAddr.sin_addr); closesocket(ListeningSocket); / Start sending and receiving data on NewConnection. For simplicity, / we will just receive some data and report how many bytes were / received. printf(等待接收数据.n);printf(IP is %sn,inet_ntoa(ClientAddr.sin_addr); /打印ip地址printf(port is %dn,htons(ClientAddr.sin_port); /打印端口号While(flag) if (Ret = recv(NewConnection, DataBuffer, sizeof(DataBuffer), 0) /接收数据 = SOCKET_ERROR) printf(recv failed with error %dn, WSAGetLastError(); closesocket(NewConnection); WSACleanup(); return; if(i=strcmp(buffer,back)=0) /如果是指定字符断开连接flag=0;if(flag)*(DataBuffer+Ret)=0; printf(成功接收数据 %s,共 %d byte(s).n, DataBuffer,Ret); printf(准备关闭客户端连接.n);closesocket(NewConnection); / When your application is finished handling the connections / call WSACleanup. WSACleanup();/ tcpclient.exe /TCPCLIENT:#include #include void main(void) WSADATA wsaData; SOCKET s; SOCKADDR_IN ServerAddr; int Port = 5150; int Ret; Char sendbuf100; / Initialize Winsock version 2.2 if (Ret = WSAStartup(MAKEWORD(2,2), &wsaData) != 0) printf(WSAStartup failed with error %dn, Ret); return; / Create a new socket to make a client connection. if (s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = INVALID_SOCKET) printf(socket failed with error %dn, WSAGetLastError(); WSACleanup(); return; ServerAddr.sin_family = AF_INET; ServerAddr.sin_port = htons(Port); ServerAddr.sin_addr.s_addr = inet_addr(127.0.0.1);/本机ip / Make a connection to the server with socket s. printf(ready to connect %s:%d.n,inet_ntoa(ServerAddr.sin_addr), htons(ServerAddr.sin_port); if (connect(s, (SOCKADDR *) &ServerAddr, sizeof(ServerAddr) = SOCKET_ERROR) printf(connect failed with error %dn, WSAGetLastError(); closesocket(s); WSACleanup(); return; printf(客户端连接成功.n); / At this point you can start sending or receiving data on / the socket s. We will just send a hello message to the server. printf(准备传送数据n);while(1)printf(input your word:);fflush(stdin);scanf(%s,sendbuf);printf(n);if(strcmp(sendbuf,back)=0) /如果是指定字符退出连接break;send(s, sendbuf, sizeof(sendbuf), 0)if (Ret = send(s, sendbuf, sizeof(sendbuf), 0) = SOCKET_ERROR) printf(send failed with error %dn, WSAGetLastError(); closesocket(s); WSACleanup(); return; printf(成功发送数据 %d byte(s).n, Ret); / When you are finished sending and receiving data on socket s, / you should close the socket. printf(关闭连接.n); closesocket(s); / When your application is finished handling the connection, call / WSACleanup. WSACleanup();UDPSERVER:#include#includevoid main()WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 )return;if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );return; SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR);char recvBuf100;char sendBuf100;char tempBuf200;SOCKADDR_IN addrClient;int len=sizeof(SOCKADDR);while(1)recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);if(q=recvBuf0)sendto(sockSrv,q,strlen(q)+1,0,(SOCKADDR*)&addrClient,len);printf(chat end!n);break;sprintf(tempBuf,%s say: %s,inet_ntoa(addrClient.sin_addr),recvBuf);printf(%sn,tempBuf);printf(Please input data:n);gets(sendBuf);sendto(sockSrv,sendBuf,strlen(sendBuf)+1,0,(SOCKADDR*)&addrClient,len);closesocket(sockSrv);WSACleanup();UDPCLIENT:#include#includevoid main()WORD wVersionRequested;WSADATA wsaData;int err;wVersionRequested = MAKEWORD( 1, 1 );err = WSAStartup( wVersionRequested, &wsaData );if ( err != 0 )return;if ( LOBYTE( wsaData.wVersion ) != 1 | HIBYTE( wsaData.wVersion ) != 1 ) WSACleanup( );return; SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);SOCKADDR_IN addrSrv;addrSrv.sin_addr.S_un.S_addr=inet_addr(127.0.0.1);addrSrv.sin_family=AF_INET;addrSrv.sin_port=htons(6000);char recvBuf100;char sendBuf100;char tempBuf200

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论