Socket编程利用TCP协议的实验报告(同名2444)(共9页)_第1页
Socket编程利用TCP协议的实验报告(同名2444)(共9页)_第2页
Socket编程利用TCP协议的实验报告(同名2444)(共9页)_第3页
Socket编程利用TCP协议的实验报告(同名2444)(共9页)_第4页
Socket编程利用TCP协议的实验报告(同名2444)(共9页)_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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(,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)/发送失败printf(send msg failed with error : %dn,iErrMsg);rlt = 1;return rlt;return rlt;void CClientNet:Close()closesocket(m_sock);int main()CClientNet client;/连接到(即本地),端口号为8888的服务端printf(Connectn);client.Connect(8888,);/发送消息printf(send msgn);client.SendMsg(hello0,sizeof(hello0

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论