




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Socket 编程报告( TCP/IP 协议)实验目的通过 C+ 来实现 TCP/IP 协议下的 Socket 编程,掌握 TCP 协议的算法实现实验原理Connect 连接到服务器,send 发送消息,等待处理,通信完客户端 建立 Socket ,通过端口号和地址确定目标服务器,使用 成后调用 CloseSocket 关闭 Socket服务端 建立 Socket ,声明自身的端口号和地址并绑定到 Socket ,使用 Listen 打开监听,然后不断用 Accept 去查看是否有连 接,如果有,捕获 Socket ,并通过 Recv 获取消息的内容,通信完成后调用 CloseSocket 关
2、闭这个对应 Accept 到的 Socket , 如果不再需要等待任何客户端连接,那么用 CloseSocket 关闭掉自身的 Socket三 实验代码( 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( con
3、st char* address,int port )int rlt = 0;/ 用于记录错误信息,并输出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_
4、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);/ 绑定iErrorMsg = bind(m_so
5、ck,(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 rval;do/ 接收信息newSocket = acce
6、pt(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)/ 这应该是个异常,当客户端没有调用 closeSocket 就直接退出游戏的时候,将
7、会进入这里 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);/ 关闭自身的 Socketclosesocket(m_sock);int main(int argc, char *argv)CServerNet serverNet;int iRlt = serv
8、erNet.Init(,8888);if (iRlt = 0)printf(init ok.n);serverNet.Run();elseprintf(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 Se
9、ndMsg(const char* msg,int len);/ 关闭void Close();private:SOCKET m_sock;int CClientNet: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 :
10、 %dn,iErrMsg);rlt = 1;return rlt;/ 创建 Socketm_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;/ 目标服务器数据 sockaddr_in sockaddrServer;sockaddrServer.sin_family = AF_INET;sockaddrServer.si
11、n_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,iErrMsg);rlt = 3;return rlt;return rlt;int CClientNet:SendMsg(const char* msg,int len
12、)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(he
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年养殖市场分析:生猪价格与饲料成本博弈下的行业微利时代来临
- 2025年卫浴柜行业竞争分析:卫浴柜行业竞争格局更加激烈
- 贵州省铜仁市2024-2025学年高三上学期1月期末考试英语试题【含答案】
- 2024-2025学年北京市朝阳区高二(上)期末历史试卷
- 2025年公共营养师操作试题及答案
- 2025年医院常见面试题及答案
- 居家老人测试题及答案
- 水土保护毯施工方案
- 5年级上册所有文言文
- 4年级下册英语书科普版
- 施工现场交叉作业安全防护管理措施
- 特殊学生档案
- 2024年02月浙江2024年萧山农商银行春季校园招考笔试历年参考题库附带答案详解
- 2024年东营市东营区人民医院高层次卫技人才招聘笔试历年参考题库频考点附带答案
- 装配式混凝土建筑基本结构体系- 杨15课件讲解
- 直肠癌新辅助治疗
- 10.1溶液的酸碱性教学设计-2024-2025学年九年级化学人教版下册
- 《3-6岁儿童学习与发展指南》考试复习题库(含答案)
- 《个体防护装备安全管理规范AQ 6111-2023》知识培训
- 电力法律法规培训
- 习近平总书记关于教育的重要论述研究(云南师范大学)知到智慧树章节答案
评论
0/150
提交评论