ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议)
更新时间:2023-03-08 09:26:19 阅读量: 综合文库 文档下载
Project 1 Socket Programming
Requirements:
In this project, Studentwill learn the important skill of distributed programming using socket programming. Socket programming is very cool and the basis of the vast majority of Internet programming.
Student will write a TCP or UDPclient and a TCP or UDPserver. Implement a client that retrieves temperature, humidity and light data from a remote server. The client should connect to the server, stay connected, and retrieve a number of readings. The client can request readings from the server as many times as you want.
The server is responsible for accepting client connections and sending out the right data according to the commands sent by clients.
Data returned by the server are like:
TEMPERATURE = 60 HUMIDITY = 0 LIGHT = 1
The background to this programming idea is that a client can interacts with a sensor and gets real-time sensor readings, such as temperature, humidity, and light. Here the “sensor” is the server software.
Codes (TCP): Client Program (TCP) #include
WORD wVersionRequested; //加载socket动态链接库(dll) WSADATA wsaData; //此结构用于接收Windows Socket的结构信息 int err; wVersionRequested = MAKEWORD(1, 1); //请求1.1版本的WinSock库 err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) //返回值 = 0,表示成功申请了一个WSAStartup return -1; if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { //低字节 =1,高字节 =1才是1.1版本,否则清除信息,结束函数 1 / 7
} WSACleanup(); return -1; //创建socket操作,建立SOCK_STREAM(TCP),返回Socket字号sockClient SOCKET sockClient = socket(AF_INET, SOCK_STREAM, 0); //①AF_INET:指定地址簇-TCP只能是AF_INET //②SOCK_STREAM:选择Socket类型(TCP) //③0:默认 //向服务器发出连接请求(connect()) SOCKADDR_IN addrSrv; addrSrv.sin_addr.S_un.S_addr = inet_addr(\本地回路地址 addrSrv.sin_family = AF_INET; addrSrv.sin_port = htons(6000); connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(SOCKADDR)); //①sockCli:需要进行连接操作的套接字 //②(SOCKADDR*)&addrSrv:设定所需要连接的地址信息 //③地址长度 char sendBuf[100]; sprintf_s(sendBuf, \send(sockClient, sendBuf, strlen(sendBuf) + 1, 0); char recvBuf[100]; recv(sockClient, recvBuf, 100, 0); printf(\char Crequest[2]; while (true) { memset(Crequest, 0, sizeof(Crequest)); scanf_s(\ getchar(); Crequest[1] = '\\0'; send(sockClient, Crequest, strlen(Crequest)+1, 0); recv(sockClient, recvBuf, 100, 0); printf(\2 / 7
} } closesocket(sockClient); WSACleanup(); // 终止对套接字库的使用 return 0; Server Program (TCP) #include
WORD wVersionRequested; //加载socket动态链接库(dll) WSADATA wsaData; //此结构用于接收Windows Socket的结构信息 int err; wVersionRequested = MAKEWORD(1, 1); //请求1.1版本的WinSock库 err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) //返回值 = 0,表示成功申请了一个WSAStartup return -1; if (LOBYTE(wsaData.wVersion) != 1 || HIBYTE(wsaData.wVersion) != 1) { } //低字节 =1,高字节 =1才是1.1版本,否则清除信息,结束函数 WSACleanup(); return -1; //创建socket操作,建立SOCK_STREAM(TCP),返回Socket字号sockSrv SOCKET sockSrv = socket(AF_INET, SOCK_STREAM, 0); //①AF_INET:指定地址簇-TCP只能是AF_INET 3 / 7
//②SOCK_STREAM:选择Socket类型(TCP) //③0:默认 //绑定套接字sockSrv到一个IP地址和一个端口上 SOCKADDR_IN addrSrv; //TCP中,使用SOCKADDR_IN代替SOCKADDR addrSrv.sin_addr.S_un.S_addr = htonl(INADDR_ANY); //套接字的主机IP地址 addrSrv.sin_family = AF_INET; //表示地址族,对于IP地址,sin_family成员将一直是AF_INET addrSrv.sin_port = htons(6000); //指定将要分配给套接字的端口 bind(sockSrv, (SOCKADDR *)&addrSrv, sizeof(SOCKADDR)); //①sockSrv:指定需要绑定的套接字 //②(SOCKADDR *)&addrSrv:指定该套接字的本地地址信息(强制类型转换) //③sizeof(SOCKADDR):指定该网络协议地址长度 //套接字设置为监听模式(链接请求),listen()通知TCP服务器主备好接收连接 listen(sockSrv, 10); //①sockSrv:指定需要设置的套接字 //②10:等待连接队列的最大长度 SOCKADDR_IN addrClient; int length = sizeof(SOCKADDR); printf(\ while (true)//等待客户端请求 { //请求到来后,接受连接请求,返回一个新的对应于此次连接的套接字(accept()) SOCKET sockConnect = accept(sockSrv, (SOCKADDR*)&addrClient, &length); //①sockSrv:接收一个处于监听状态下的套接字 //②(SOCKADDR*)&addrClient:保存客户端地址信息 //③&length:指定这个地址的长度 //返回值:向这个处于监听状态的套接字通信的套接字 //用返回的套接字和客户端进行通信(send()/recv()) char sendBuf[100]; sprintf_s(sendBuf, \//发送数据 4 / 7
send(sockConnect, sendBuf, strlen(sendBuf) + 1, 0); //①sockConnect:需要发送信息的套接字 //②sendBuf:需要被传输的数据 //③strlen(sendBuf) + 1:buffer的长度 char recvBuf[100]; //接收数据 recv(sockConnect, recvBuf, 100, 0); //①sockConnect:建立连接后的套接字 //②recvBuf:接收数据 //③接收数据的长度 printf(\char Crespond[2]; //FILE *Temperature = fopen(\//FILE *Humidity = fopen(\ //FILE *Light = fopen(\ifstream Temperature (\大四\\\\网络技术\\\\Socket编程\\\\Server\\\\temperature.dat\ifstream Humidity (\大四\\\\网络技术\\\\Socket编程\\\\Server\\\\humidity.dat\ifstream Light (\大四\\\\网络技术\\\\Socket编程\\\\Server\\\\light.dat\int T, H, L; while (true) { memset(Crespond, 0, sizeof(Crespond)); memset(sendBuf, 0, sizeof(sendBuf)); recv(sockConnect, Crespond, 2, 0); if (Crespond[0] != 'R') break; else { Temperature >> T; Humidity >> H; Light >> L; 5 / 7
= %d\\n\ } }
Execute Result:
Client (Enter ‘R’ and get the datum):
} sprintf_s(sendBuf, \HUMIDITY = %d T,H,L); printf(\send(sockConnect, sendBuf, strlen(sendBuf)+1, 0); LIGHT Temperature.close(); Humidity.close(); Light.close(); closesocket(sockConnect); } closesocket(sockSrv); WSACleanup(); return 0;
6 / 7
Server(One Client & Two or more clients):
Conclusion:
This socket communication is dependent on TCP protocol. Network programming is still following create->initialize->communicate->close this sequence.
7 / 7
正在阅读:
ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议)03-08
初高中衔接教材含答案11-22
无创呼吸机使用方法03-29
吸收习题解09-20
一年级家长会发言稿推荐-范文模板(2页)05-19
梦幻西游五开攻略,梦幻西游2五开秘籍07-27
机械类专业课程名称中英文对照03-05
2013会计《经济学基础》练习题03-28
PSSE程序操作手册05-30
恒温恒湿空调设计总体说明03-08
- 计算机试题
- 【2012天津卷高考满分作文】鱼心人不知
- 教育心理学历年真题及答案--浙江教师资格考试
- 20180327-第六届“中金所杯”全国大学生金融知识大赛参考题库
- 洪林兴达煤矿2018年度水情水害预测预报
- 基本要道讲义
- 机电设备安装试运行异常现象分析与对策
- 《有机化学》复习资料-李月明
- 非常可乐非常MC2--非常可乐广告策划提案 - 图文
- 2011中考数学真题解析4 - 科学记数法(含答案)
- 企业人力资源管理师三级07- 09年真题及答案
- 基于单片机的光控自动窗帘控制系统设计说明书1 - 图文
- 20160802神华九江输煤皮带机安装方案001
- (共53套)新人教版一生物必修2(全册)教案汇总 word打印版
- 2014行政管理学总复习
- 中国银监会关于加强地方政府融资平台贷款风险监管的指导意见
- 民宿酒店核心竞争与研究
- 游园活动谜语大全2012
- 河南省天一大联考2016届高三英语5月阶段性测试试题(六)(A卷)
- 小型超市管理系统毕业论文详细设计4
- ProgrammingProje
- SocketProgrammin
- WinSocket
- 协议
- 编程
- TCP
- ct
- 《正常人体学基础》教案
- 2017高三数学备课组工作计划精选
- 2011年高考试题(山东卷)
- 新-船舶结构与货运-真题-部分
- 对口生网上志愿填报模拟演练操作手册 - 图文
- 从“钱老之问”,看“黄维之说”
- 在线测试题试题库及解答(第四章)影响线
- Linux下Wi—Fi驱动程序的设计与实现
- 41煤区二号辅助运输巷及1号措施巷施工安全技术措施
- 第三单元教案
- 初一数学上册应用题大全
- 选择判断题
- 七年级英语第二课堂活动方案
- 武汉大学2013年学生暑期社会实践活动优秀成果名单
- 统计学试题和答案
- CA6150数控车床主轴箱及传动系统设计
- 学生行为规范建设活动实施方案
- 轴承座说明书
- 公共浙江事业单位考试公共基础知识每日一练(2014.5.12) —事业单
- MapGIS K9集体土地所有权建库流 - 图文