socket编程利用tcp协议的实验报告

上传人:小** 文档编号:91142951 上传时间:2019-06-26 格式:DOC 页数:9 大小:124.01KB
返回 下载 相关 举报
socket编程利用tcp协议的实验报告_第1页
第1页 / 共9页
socket编程利用tcp协议的实验报告_第2页
第2页 / 共9页
socket编程利用tcp协议的实验报告_第3页
第3页 / 共9页
socket编程利用tcp协议的实验报告_第4页
第4页 / 共9页
socket编程利用tcp协议的实验报告_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《socket编程利用tcp协议的实验报告》由会员分享,可在线阅读,更多相关《socket编程利用tcp协议的实验报告(9页珍藏版)》请在金锄头文库上搜索。

1、 Socket编程报告(TCP/IP协议) 1 实验目的通过C+来实现TCP/IP协议下的Socket编程,掌握TCP协议的算法实现。2 实验原理客户端 建立Socket,通过端口号和地址确定目标服务器,使用Connect连接到服务器,send发送消息,等待处理,通信完成后调用CloseSocket关闭Socket 服务端 建立Socket,声明自身的端口号和地址并绑定到Socket,使用Listen打开监听,然后不断用Accept去查看是否有连接,如果有,捕获Socket,并通过Recv获取消息的内容,通信完成后调用CloseSocket关闭这个对应Accept到的Socket,如果不再需要

2、等待任何客户端连接,那么用CloseSocket关闭掉自身的Socket3 实验代码(C+实现)服务器端代码如下:#pragma once#include #include #pragma comment (lib,ws2_32.lib)class CServerNetpublic: /初始化服务器,返回0表示成功int Init(const char* address,int port); /更新数据void Run();private:SOCKET m_sock;int CServerNet:Init( const char* address,int port )int rlt = 0;

3、/用于记录错误信息,并输出int iErrorMsg; /初始化WinSockWSAData wsaData;iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrorMsg != NO_ERROR)/初始化WinSock失败printf(wsastartup failed with error : %dn,iErrorMsg); rlt = 1;return rlt;/创建服务端Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);if (m_sock = INVALID_SOCK

4、ET) /创建Socket异常printf(socket failed with error : %dn,WSAGetLastError(); rlt = 2;return rlt;/声明信息sockaddr_in serverAddr;serverAddr.sin_family = AF_INET;serverAddr.sin_port = port;serverAddr.sin_addr.s_addr = inet_addr(address);/绑定iErrorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr);if (i

5、ErrorMsg 0)/绑定失败printf(bind failed with error : %dn,iErrorMsg);rlt = 3;return rlt; return rlt;void CServerNet:Run()/公开连接listen(m_sock,5);sockaddr_in tcpAddr;int len = sizeof(sockaddr);SOCKET newSocket;char buf1024;int rval;do/接收信息newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len); if (newSocket = I

6、NVALID_SOCKET)/非可用socket else/新socket连接 printf(new socket connect : %dn,newSocket); /消息处理doprintf(processn);/接收数据memset(buf,0,sizeof(buf);rval = recv(newSocket,buf,1024,0);if (rval = SOCKET_ERROR)/这应该是个异常,当客户端没有调用closeSocket就直接退出游戏的时候,将会进入这里printf(recv socket errorn); if (rval = 0)/recv返回0表示正常退出prin

7、tf(ending connection);else/显示接收到的数据printf(recv %sn,buf);while(rval != 0);/关闭对应Accept的socketclosesocket(newSocket); while (1);/关闭自身的Socketclosesocket(m_sock);int main(int argc, char *argv)CServerNet serverNet;int iRlt = serverNet.Init(127.0.0.1,8888);if (iRlt = 0)printf(init ok.n);serverNet.Run();els

8、eprintf(serverNet init failed with error : %dn,iRlt);system(pause);客户端代码如下:#pragma once#include #include#pragma comment(lib, Ws2_32.lib)class CClientNetpublic:/连接上指定服务器int Connect(int port,const char* address);/发送信息int SendMsg(const char* msg,int len);/关闭void Close();private:SOCKET m_sock;int CClien

9、tNet:Connect( int port,const char* address )int rlt = 0;/用于记录错误信息并输出int iErrMsg;/启动WinSockWSAData wsaData;iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData);if (iErrMsg != NO_ERROR)/有错误printf(failed with wsaStartup error : %dn,iErrMsg);rlt = 1;return rlt;/创建Socketm_sock = socket(AF_INET,SOCK_STREAM,IPPROT

10、O_TCP);if (m_sock = INVALID_SOCKET)/创建Socket失败printf(socket failed with error : %dn,WSAGetLastError();rlt = 2;return rlt;/目标服务器数据sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.sin_port = port;sockaddrServer.sin_addr.s_addr = inet_addr(address);/连接,sock与目标服务器连接iErrMsg =

11、 connect(m_sock,(sockaddr*)&sockaddrServer,sizeof(sockaddrServer);if (iErrMsg 0)printf(connect failed with error : %dn,iErrMsg);rlt = 3;return rlt;return rlt;int CClientNet:SendMsg(const char* msg,int len)int rlt = 0;int iErrMsg = 0;/发送消息,指定sock发送消息iErrMsg = send(m_sock,msg,len,0);if (iErrMsg 0)/发送失

12、败printf(send msg failed with error : %dn,iErrMsg);rlt = 1;return rlt;return rlt;void CClientNet:Close()closesocket(m_sock);int main()CClientNet client;/连接到127.0.0.1(即本地),端口号为8888的服务端printf(Connectn);client.Connect(8888,127.0.0.1);/发送消息printf(send msgn);client.SendMsg(hello0,sizeof(hello0);/关闭socketprintf(closen);client.Close();system(pause);4 实验结果5 心得体会 通过本次实验,我了解了TCP/IP协议与UDP协议的异同之处,理解了Socket在通信中的地位和作用。在调试程序过程中的查错纠错也让我对程序有了深刻的理解,虽然程序是借鉴他人的,但我通过调试之后的进一步解析阅读也掌握了其中的原理,收获颇丰。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 管理学资料

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号