77范文网 - 专业文章范例文档资料分享平台

ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议)

来源:网络收集 时间:2019-03-28 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

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 #include #include #pragma comment(lib,%using namespace std; int main() {

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 #include #include #include #include #include #pragma comment(lib,%using namespace std; int main() {

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

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议)在线全文阅读。

ProgrammingProject1 SocketProgramming(WinSocket编程-TCP协议).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/554140.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: