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

下载本文档

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

文档简介

1、socket编程报告( tcp/ip 协议)一实验目的通过 c+ 来实现 tcp/ip 协议下的 socket 编程,掌握 tcp 协议的算法实现。二实验原理客户端建立 socket ,通过端口号和地址确定目标服务器,使用connect连接到服务器, send 发送消息,等待处理,通信完成后调用 closesocket关闭 socket 服务端建立 socket ,声明自身的端口号和地址并绑定到socket ,使用 listen 打开监听,然后不断用accept去查看是否有连接,如果有,捕获socket ,并通过 recv 获取消息的内容,通信完成后调用closesocket关闭这个对应acc

2、ept 到的 socket ,如果不再需要等待任何客户端连接,那么用closesocket关闭掉自身的socket三 实验代码( c+ 实现)服务器端代码如下:#pragma once #include #include #pragma comment (lib,ws2_32.lib) class cservernet public: /初始化服务器 ,返回 0 表示成功int init(const char* address,int port); /更新数据void run(); private: socket m_sock; ; int cservernet:init( const cha

3、r* 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_inet

4、,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); / 绑定ierrorms

5、g = 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 rv

6、al; 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, ch

8、ar *argv) cservernet servernet; int irlt = servernet.init(,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 comment(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),&

10、wsadata); 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; /

11、目标服务器数据sockaddr_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 er

12、ror : %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(hell

温馨提示

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

评论

0/150

提交评论