ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议)
更新时间:2024-06-18 19:00:01 阅读量: 综合文库 文档下载
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协议)06-18
山东省新泰市刘杜镇中心学校2015-2016学年六年级下学期思想品德期中模拟试题 doc10-16
技师技工作总结03-25
制程审核表03-19
把未来放在手心作文500字06-21
学生法制教育专题讲座观后感精选范文8篇08-04
退伙纠纷案一审代理词11-13
浅析现代美学视角下的电影音乐05-25
- 多层物业服务方案
- (审判实务)习惯法与少数民族地区民间纠纷解决问题(孙 潋)
- 人教版新课标六年级下册语文全册教案
- 词语打卡
- photoshop实习报告
- 钢结构设计原理综合测试2
- 2014年期末练习题
- 高中数学中的逆向思维解题方法探讨
- 名师原创 全国通用2014-2015学年高二寒假作业 政治(一)Word版
- 北航《建筑结构检测鉴定与加固》在线作业三
- XX县卫生监督所工程建设项目可行性研究报告
- 小学四年级观察作文经典评语
- 浅谈110KV变电站电气一次设计-程泉焱(1)
- 安全员考试题库
- 国家电网公司变电运维管理规定(试行)
- 义务教育课程标准稿征求意见提纲
- 教学秘书面试技巧
- 钢结构工程施工组织设计
- 水利工程概论论文
- 09届九年级数学第四次模拟试卷
- ProgrammingProje
- SocketProgrammin
- WinSocket
- 协议
- 编程
- TCP
- ct
- 《正常人体学基础》教案
- 2017高三数学备课组工作计划精选
- 2011年高考试题(山东卷)
- 新-船舶结构与货运-真题-部分
- 对口生网上志愿填报模拟演练操作手册 - 图文
- 从“钱老之问”,看“黄维之说”
- 在线测试题试题库及解答(第四章)影响线
- Linux下Wi—Fi驱动程序的设计与实现
- 41煤区二号辅助运输巷及1号措施巷施工安全技术措施
- 第三单元教案
- 初一数学上册应用题大全
- 选择判断题
- 七年级英语第二课堂活动方案
- 武汉大学2013年学生暑期社会实践活动优秀成果名单
- 统计学试题和答案
- CA6150数控车床主轴箱及传动系统设计
- 学生行为规范建设活动实施方案
- 轴承座说明书
- 公共浙江事业单位考试公共基础知识每日一练(2014.5.12) —事业单
- MapGIS K9集体土地所有权建库流 - 图文