TCP,UDPCLIENT实验报告.docx
文本预览下载声明
一、实验题目:使用Select模型的网络程序设计二、实验目的 熟悉使用select模型进行网络程序设计。三、实验环境硬件环境:奔3以上处理器,512MB以上内存空间软件环境:windows2000以上操作系统,VC6.0编译环境。四、实验内容与完成情况使用select对实验1的程序进行重新设计。使用TCP建立一个服务器和和客户端,客户端可以连接服务器,并向服务器发送数据,服务器收到数据后把数据打印出来并传给客户端。客户端接收后再打印出来。客户端发送数据可以从键盘读入。上述过程使用UDP重复一遍。完成情况:我完成了TCP跟UDP的设计。TCP服务端的设计步骤:首先应该创建套接口,确定协议类型,然后将套接口跟本地地址绑定,进行监听,等待客户端连接的请求的到来,然后准备接收数据,交换数据,把数据返回给客户端,最后关闭TCP连接,关闭服务器。但是要用select模型,首先定义select函数中的变量,设置参数值:fd_set rfd;FD_ZERO(rfd);struct timeval timeout;timeout.tv_sec=10;timeout.tv_usec=0;u_long ul=1;ioctlsocket(sock2,FIONBIO,ul);FD_SET(sock2,rfd);然后就在循环中加入select函数,并给出可能出现的实验结果。int ret=select(0,rfd,NULL,NULL,timeout);if (ret==0){printf(time is over!);break;}else if (SOCKET_ERROR==ret){printf(SOCKET ERROR!);break;}else{memset(rebuff,0,1000);count=recv(sock,rebuff,1000,0);if (count0) break;if(count==0) break; printf(rebuff);}TCP客户端的设计步骤:创建套接口,建立连接,跟服务端发送请求,接收数据然后关闭TCP连接,关闭客户端。//地址初始化sai.sin_family=AF_INET;sai.sin_port=htons(4777);sai.sin_addr.s_addr=inet_addr(127.0.0.1);客户端跟服务器端代码基本是一样的:int ret=select(0,rfd,NULL,NULL,timeout);if (ret==0)//判断连接是否超时{printf(time is over!);break;}else if (SOCKET_ERROR==ret){printf(SOCKET ERROR!);break;}else{memset(rebuff,0,1000);count=recv(sock,rebuff,1000,0);if (count0) break;if(count==0) break; printf(rebuff);}运行结果:UDP发送端:不需要建立连接,发送端步骤:创建套接字后,地址初始化,发送信息,然后关闭套接字。基本变量设置fd_set rfd;struct timeval timeout;timeout.tv_sec=30;timeout.tv_usec=0;FD_ZERO(rfd);u_long ul=1;int ret;ioctlsocket(sock,FIONBIO,ul);FD_SET(sock,rfd); 循环中的语句:scanf(%s,buff);int count=sendto(sock,buff,strlen(buff)+1,0,(struct sockaddr *)sai,sizeof(sai));ret=select(0, rfd, NULL, NULL, timeout); if (ret==0){printf(time is over!!!);break;}else if (SOCKET_ERROR==ret){printf(select error!!!);break;}else{memset(buff,0,1000);//count=recv(sock,buff,1000,0);count=recvfrom(sock,buff,100,0,(struct sockaddr *)sai,len);if(count0) break;if(count==0) break;printf(buff);printf(\n);}接收端:创建套接字,地址初始化,绑定套接字跟端口,接受信息,打印出数据,关闭套接字。sai.sin_addr.s_addr=htonl(INADDR_ANY);bind(sock,(struct sockaddr *)sai
显示全部