




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 演出经纪人之《演出经纪实务》题库及答案详解(必刷)
- 教师招聘之《小学教师招聘》能力提升题库及参考答案详解(研优卷)
- 2025内蒙古鄂尔多斯东胜区第五小学分校塔拉壕小学招聘1人笔试备考完整答案详解
- 教师招聘之《小学教师招聘》复习提分资料【研优卷】附答案详解
- 教师招聘之《幼儿教师招聘》考前冲刺练习及答案详解(有一套)
- 2025年学历类自考国际公共关系-教育学(一)参考题库含答案解析(5卷)
- 2025内蒙古呼伦贝尔林业集团有限公司招聘工作人员5人备考含答案详解
- 2025年学历类自考国民经济统计概论-马克思主义基本原理参考题库含答案解析(5卷)
- 教师招聘之《幼儿教师招聘》考试历年机考真题集及参考答案详解(新)
- 2025年教师招聘之《小学教师招聘》题库附参考答案详解【黄金题型】
- 光伏电站建设安全总监岗位职责
- 报废汽车回收拆解企业技术规范
- 特种设备重大事故隐患判定准则试题及答案
- 三级安全教育试题及答案
- 脱硝培训试题一及答案
- 两人合伙贷款合同范本
- 人工智能全套课件下载
- 美容护肤产品合同协议
- 2025-2030中国高压造影剂注射管行业市场现状供需分析及投资评估规划分析研究报告
- 终止妊娠药品规范化管理
- 护理输入过期液体不良事件
评论
0/150
提交评论