资源描述:
《Socket编程利用TCP协议的实验报告》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、.Socket编程报告(TCP/IP协议)..一.实验目的通过C++来实现TCP/IP协议下的Socket编程,掌握TCP协议的算法实现。二.实验原理客户端建立Socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用CloseSocket关闭Socket服务端建立Socket,声明自身的端口号和地址并绑定到Socket,使用Listen打开监听,然后不断用Accept去查看是否有连接,如果有,捕获Socket,并通过Recv获取消息的内容,通信完成后调用
2、CloseSocket关闭这个对应Accept到的Socket,如果不再需要等待任何客户端连接,那么用CloseSocket关闭掉自身的Socket三.实验代码(C++实现)服务器端代码如下:#pragmaonce#include#include#pragmacomment(lib,"ws2_32.lib")classCServerNet{public://初始化服务器,返回0表示成功intInit(constchar*address,intport);//更新数据voidRu
3、n();private:SOCKETm_sock;};intCServerNet::Init(constchar*address,intport){intrlt=0;//用于记录错误信息,并输出intiErrorMsg;//初始化WinSockWSADatawsaData;iErrorMsg=WSAStartup(MAKEWORD(1,1),&wsaData);if(iErrorMsg!=NO_ERROR){..//初始化WinSock失败printf("wsastartupfailedwitherror:%d"
4、,iErrorMsg);rlt=1;returnrlt;}//创建服务端Socketm_sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if(m_sock==INVALID_SOCKET){//创建Socket异常printf("socketfailedwitherror:%d",WSAGetLastError());rlt=2;returnrlt;}//声明信息sockaddr_inserverAddr;serverAddr.sin_family=AF_INET;ser
5、verAddr.sin_port=port;serverAddr.sin_addr.s_addr=inet_addr(address);//绑定iErrorMsg=bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr));if(iErrorMsg<0){//绑定失败printf("bindfailedwitherror:%d",iErrorMsg);rlt=3;returnrlt;}returnrlt;}voidCServerNet::Run(){//公开连接l
6、isten(m_sock,5);sockaddr_intcpAddr;intlen=sizeof(sockaddr);SOCKETnewSocket;charbuf[1024];intrval;..do{//接收信息newSocket=accept(m_sock,(sockaddr*)&tcpAddr,&len);if(newSocket==INVALID_SOCKET){//非可用socket}else{//新socket连接printf("newsocketconnect:%d",newSocket);//消
7、息处理do{printf("process");//接收数据memset(buf,0,sizeof(buf));rval=recv(newSocket,buf,1024,0);if(rval==SOCKET_ERROR)//这应该是个异常,当客户端没有调用closeSocket就直接退出游戏的时候,将会进入这里printf("recvsocketerror");if(rval==0)//recv返回0表示正常退出printf("endingconnection");else//显示接收到的数据printf("
8、recv%s",buf);}while(rval!=0);//关闭对应Accept的socketclosesocket(newSocket);}}while(1);//关闭自身的Socketclosesocket(m_sock);}..intmain(intargc,char**argv){CServerNetserverNet;intiR