简单TCP通信程序设计实验报告学校:华中科技大学学院:姓名:学号:同组人:一,实验目的初步掌握C++语言TCP/IP通信程序的设计。二,实验环境1、Windows7操作系统。2、编程工具:VisualStudio2010。三,实验框图WinSock通过流式套接字(SOCK_STREAM)提供TCP服务。通常服务器进程先启动,等待客户端的连接请求。其基基通信过程如下图1所示。四,实验内容与步骤(server)1,加载WinSock动态链接库函数原型:intWSAStartup(WORDwVersionRequested,LPWSADATAlpWSAData);程序代码://加载WinSock.DllWSADATAwsaData;WORDwVersionRequested=MAKEWORD(2,2);if(WSAStartup(wVersionRequested,&wsaData)!=0){//WinSock初始化错误处理代码}2,创建套接字创建套接字的实质是请求操作系统分配通信所需要的资源(包括存储空间、网络资源、CPU时间等),用一个称为套接字描述符(socketdescriptor)的整数表示。函数原型:SOCKETsocket(intaf,inttype,intprotocol);程序代码://创建套接字SOCKETsock_client;if((sock_client=socket(AF_INET,SOCK_STREAM,0))==INVALID_SOCKET){cout创建套接字失败!错误代码:WSAGetLastError()endl;WSACleanup();return1;}3,建立连接客户端则在创建套接字后,调用connect函数发起连接建立请求。函数原型:intconnect(SOCKETs,conststructsockaddr*name,intnamelen);程序代码://建立连接structsockaddr_inserver_addr;//用于存放要连接服务器的地址intaddr_len=sizeof(server_addr);//填写服务器地址memset((void*)&server_addr,0,sizeof(structsockaddr_in));server_addr.sin_family=AF_INET;server_addr.sin_port=htons(65432);server_addr.sin_addr.s_addr=inet_addr(127.0.0.1);//服务器IP地址//与服务器建立连接if(connect(sock_client,(structsockaddr*)&server_addr,sizeof(structsockaddr_in))!=0){cout连接失败!错误代码:WSAGetLastError()endl;closesocket(sock_client);WSACleanup();return1;}else{//接收数据}4,发送和接收数据发送和接收数据分别使用send和recv函数。(1)recv函数原型:intrecv(SOCKETs,constchar*buf,intlen,intflags);程序代码://接收数据charmsgbuffer[255];intsize;if((size=recv(sock_client,msgbuffer,sizeof(msgbuffer),0))==SOCKET_ERROR){cout接收数据失败;错误代码:WSAGetLastError()endl;}else{cout接收到的数据:msgbufferendl;//显示从服务端接收的数据}(2)send函数原型:intsend(SOCKETs,constchar*buf,intlen,intflags);程序代码://发送数据charmsgbuf[]=Themessagetobesent.;intsize;if((size=send(sock_client,msgbuf,sizeof(msgbuf),0))==SOCKET_ERROR){cout发送数据失败;错误代码:WSAGetLastError()endl;}else{closesocket(sock_client);WSACleanup();}5,关闭套接字通信完成后,程序退出前应关闭套接字。函数原型:intclosesocket(SOCKETs);程序代码:closesocket(newsock);WSACleanup();五,实验结果,1,服务端调试成功exe文件截图:2,客户端调试成功exe文件截图六,实验总结1,编写client程序时遇到的问题及解决方法(1)在编写程序的过程中,出现了括号数不匹配,分号是中文等错误,根据提示进行了改正;(2)客户端在调试的时候出现了闪退的现象,通过在网上找资料及例子,在程序末尾增加了暂停system(pause);解决问题。2,收获