Socket编程利用TCP协议的实验报告

上传人:pu****.1 文档编号:576069273 上传时间:2024-08-19 格式:PDF 页数:5 大小:165.75KB
返回 下载 相关 举报
Socket编程利用TCP协议的实验报告_第1页
第1页 / 共5页
Socket编程利用TCP协议的实验报告_第2页
第2页 / 共5页
Socket编程利用TCP协议的实验报告_第3页
第3页 / 共5页
Socket编程利用TCP协议的实验报告_第4页
第4页 / 共5页
Socket编程利用TCP协议的实验报告_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

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

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

2、闭这个对应 Accept 到的 Socket,如果不再需要等待任何客户端连接,则用 CloseSocket 关闭掉自身的 Socket 三实验代码C+实现 效劳器端代码如下: #pragma once #include #include #pragma ment (lib,ws2_32.lib) class CServerNet public: /初始化效劳器,返回 0 表示成功 int Init(const char* address,int port); /更新数据 void Run(); private: SOCKET m_sock; ; int CServerNet:Init( con

3、st char* address,int port ) int rlt = 0; /用于记录错误信息,并输出 int iErrorMsg; /初始化 WinSock WSAData wsaData; iErrorMsg = WSAStartup(MAKEWORD(1,1),&wsaData); if (iErrorMsg != NO_ERROR) /初始化 WinSock 失败 printf(wsastartup failed with error : %dn,iErrorMsg); rlt = 1; return rlt; /创立效劳端 Socket m_sock = socket(AF_I

4、NET,SOCK_STREAM,IPPROTO_TCP); if (m_sock = INVALID_SOCKET) . /创立 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); /绑定 iEr

5、rorMsg = bind(m_sock,(sockaddr*)&serverAddr,sizeof(serverAddr); if (iErrorMsg 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 r

6、val; do /接收信息 newSocket = accept(m_sock,(sockaddr*)&tcpAddr,&len); if (newSocket = INVALID_SOCKET) /非可用 socket else /新 socket 连接 printf(new socket connect : %dn,newSocket); /消息处理 . do printf(processn); /接收数据 memset(buf,0,sizeof(buf); rval = recv(newSocket,buf,1024,0); if (rval = SOCKET_ERROR) /这应该是个

7、异常,当客户端没有调用 closeSocket 就直接退出游戏的时候,将会进入这里 printf(recv socket errorn); if (rval = 0) /recv 返回 0 表示正常退出 printf(ending connection); else /显示接收到的数据 printf(recv %sn,buf); while(rval != 0); /关闭对应 Accept 的 socket closesocket(newSocket); while (1); /关闭自身的 Socket closesocket(m_sock); int main(int argc, char

8、*argv) CServerNet serverNet; int iRlt = serverNet.Init(127.0.0.1,8888); if (iRlt = 0) printf(init ok.n); serverNet.Run(); else printf(serverNet init failed with error : %dn,iRlt); system(pause); 客户端代码如下: #pragma once #include #include #pragma ment(lib, Ws2_32.lib) class CClientNet public: . /连接上指定效劳

9、器 int Connect(int port,const char* address); /发送信息 int SendMsg(const char* msg,int len); /关闭 void Close(); private: SOCKET m_sock; ; int CClientNet:Connect( int port,const char* address ) int rlt = 0; /用于记录错误信息并输出 int iErrMsg; /启动 WinSock WSAData wsaData; iErrMsg = WSAStartup(MAKEWORD(1,1),&wsaData)

10、; if (iErrMsg != NO_ERROR) /有错误 printf(failed with wsaStartup error : %dn,iErrMsg); rlt = 1; return rlt; /创立 Socket m_sock = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if (m_sock = INVALID_SOCKET) /创立 Socket 失败 printf(socket failed with error : %dn,WSAGetLastError(); rlt = 2; return rlt; /目标效劳器数据 sock

11、addr_in sockaddrServer; sockaddrServer.sin_family = AF_INET; sockaddrServer.sin_port = port; sockaddrServer.sin_addr.s_addr = inet_addr(address); /连接,sock 与目标效劳器连接 iErrMsg = connect(m_sock,(sockaddr*)&sockaddrServer,sizeof(sockaddrServer); if (iErrMsg 0) printf(connect failed with error : %dn,iErrMs

12、g); 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) /发送失败 printf(send msg failed with error : %dn,iErrMsg); rlt = 1; return rlt; return rlt; void CClientNet:Close() cl

13、osesocket(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); /关闭 socket printf(closen); client.Close(); system(pause); 四实验结果 五心得体会 通过本次实验, 我了解了 TCP/IP 协议与 UDP 协议的异同之处, 理解了 Socket 在通信中的地位和作用。 在调试程序过程中的查错纠错也让我对程序有了深刻的理解, 虽然程序是借鉴他人的,但我通过调试之后的进一步解析阅读也掌握了其中的原理,收获颇丰。

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

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

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