《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信

上传人:wm****3 文档编号:44375499 上传时间:2018-06-09 格式:DOC 页数:5 大小:36KB
返回 下载 相关 举报
《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信_第1页
第1页 / 共5页
《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信_第2页
第2页 / 共5页
《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信_第3页
第3页 / 共5页
《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信_第4页
第4页 / 共5页
《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信》由会员分享,可在线阅读,更多相关《《网络程序设计》实验1_控制台方式winsock流套接字客户服务器通信(5页珍藏版)》请在金锄头文库上搜索。

1、教务处制第 1 页,共 5 页苏 州 大 学 实 验 报 告院、 系文正学院年级专业12 物联网姓名高成波学号1217443036课程名称网络程序设计成绩 指导教师陆建德同组实验者无实验日期实 验 名 称实验一 控制台方式 Winsock 流套接字客户服务器通信一. 实验内容(要求先完成题目,然后上机验证) 本实验利用 Winsock API 进行网络程序设计。参照课本示例,完成控制台方式下流式套接字 C/S 通信的客户与服务器端程序,并上机调试。要求可以实现本机两进程间以及在同一网络内不同主机之 间的通信,要求做到:每次客户端向服务器发出请求、报出自己的姓名 name,服务器回答一条消息给

2、客户:“name,你好!你是访问我服务的第 num 个用户。 ” ,客户端收到该消息后在自己的屏幕上显示。实验报告内容包括主要的实验代码、必要的注释或另外的说明文档以及实验结果与分析。服务器程序 #include #define BUF_SZIE 64 #include “winsock2.h“ #pragma comment(lib, “ws2_32.lib“)int main(int argc, char* argv) WSADATAwsd;/WSADATA 变量 SOCKETsServer;/服务器套接字 SOCKETsClient;/客户端套接字 SOCKADDR_INaddrServ

3、;/服务器地址 charbufBUF_SZIE;/接收数据缓冲区 char bufSendBUF_SZIE;/发送数据缓冲区 intretVal;/返回值 int n=1; /计数/初始化套结字动态库 if (WSAStartup(MAKEWORD(2,2), return 1; /创建套接字 sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET = sServer) 教务处制第 2 页,共 5 页printf(“socket failed!n“); WSACleanup();/释放套接字资源; retur

4、n -1; /服务器套接字地址 addrServ.sin_family = AF_INET; addrServ.sin_port = htons(6000); addrServ.sin_addr.s_addr = INADDR_ANY; /绑定套接字 retVal = bind(sServer, (LPSOCKADDR) if(SOCKET_ERROR = retVal) printf(“bind failed!n“); closesocket(sServer);/关闭套接字 WSACleanup();/释放套接字资源; return -1; /开始监听 retVal = listen(sSe

5、rver,1); if(SOCKET_ERROR = retVal) printf(“listen failed!n“); closesocket(sServer);/关闭套接字 WSACleanup();/释放套接字资源; return -1; /接受客户端请求 sockaddr_in addrClient; int addrClientlen = sizeof(addrClient); sClient = accept(sServer,(sockaddr FAR*) if(INVALID_SOCKET = sClient) printf(“accept failed!n“); closes

6、ocket(sServer);/关闭套接字 WSACleanup();/释放套接字资源; return -1; /接收客户端数据 for( ; ; )ZeroMemory(buf, BUF_SZIE); retVal = recv(sClient, buf, BUF_SZIE, 0);教务处制第 3 页,共 5 页if (SOCKET_ERROR = retVal) printf(“recv failed!n“); closesocket(sServer);/关闭套接字 closesocket(sClient);/关闭套接字 WSACleanup();/释放套接字资源; return -1;

7、printf(“%s,你好!你是连接我的第%d 个客户。n“, buf,n);/输出 name/向客户端发送数据 char str1100,str2100;itoa(n, str1, 10); strcpy(bufSend , “You are the “); strcpy(str2 , “th one connected to me.“); strcat(bufSend , str1); strcat(bufSend , str2);n = atoi(str1); retVal = send(sClient, bufSend, strlen(bufSend) +1, 0); if (SOCK

8、ET_ERROR = retVal) printf(“send failed!n“); closesocket(sClient);/关闭套接字 closesocket(sServer); WSACleanup();/释放套接字资源 return -1; n+; /退出 closesocket(sServer);/关闭套接字 closesocket(sClient);/关闭套接字 WSACleanup();/释放套接字资源; return 0; 客户端程序 #include #defineBUF_SZIE 64 #include “winsock2.h“ #pragma comment(lib,

9、 “ws2_32.lib“)教务处制第 4 页,共 5 页int main(int argc, char* argv) WSADATAwsd; /WSADATA 变量 SOCKETsHost; /服务器套接字 SOCKADDR_INservAddr; /服务器地址 charbufBUF_SZIE; /接收数据缓冲区 char recvBufBUF_SZIE;/发送数据缓冲区 intretVal; /返回值/初始化套结字动态库 if (WSAStartup(MAKEWORD(2,2), return -1; /创建套接字 sHost = socket(AF_INET, SOCK_STREAM,

10、IPPROTO_TCP); if(INVALID_SOCKET = sHost) printf(“socket failed!n“); WSACleanup();/释放套接字资源 return -1; /设置服务器地址 servAddr.sin_family =AF_INET; servAddr.sin_addr.s_addr = inet_addr(“127.0.0.1“); /该 inet_addr 函数将字符串包含一个互联网协议 地址(IPv4)点到一个适当的地址为 in_addr 结构。 servAddr.sin_port = htons(6000); intnServAddlen =

11、 sizeof(servAddr);/连接服务器 retVal=connect(sHost,(LPSOCKADDR) if(SOCKET_ERROR = retVal) printf(“connect failed!n“); closesocket(sHost);/关闭套接字 WSACleanup();/释放套接字资源 return -1; 教务处制第 5 页,共 5 页/向服务器发送数据while (1) ZeroMemory(buf, BUF_SZIE); gets(buf); retVal = send(sHost, buf, strlen(buf), 0); if (SOCKET_ER

12、ROR = retVal) printf(“send failed!n“); closesocket(sHost);/关闭套接字 WSACleanup();/释放套接字资源 return -1; /接收数据 retVal = recv(sHost, recvBuf, BUF_SZIE, 0); if (SOCKET_ERROR = retVal) printf(“recv failed!n“); closesocket(sHost);/关闭套接字 WSACleanup();/释放套接字资源 return -1; printf(“%sn“, recvBuf); /退出 closesocket(s

13、Host);/关闭套接字 WSACleanup();/释放套接字资源 return 0; 实验结果:在客户端窗口输入姓名后,服务器端窗口会返回一个语句告诉客户端是第几个连接到上面 的用户。同时,在客户端也会有相应的反馈语句,并且可以连续输入。实验分析:本次实验的前半部分,即由客户端输入名字,在服务器端显示是第几个用户,这部分做得 比较顺利,但是由于 send 函数和 receive 函数的运用不熟练,后面由服务器反馈给客户端并在客户端显 示是第几个客户这部分做的不好,但是后来经过和同学讨论等方法,我还是将程序做出来了,今后还 要加强对一些函数的学习,尤其是要熟练运用。这是学网络编程课以来第一次上机实验,是新奇的, 通过这次实践,让我熟悉了一下网络编程的编程环境,希望对今后的实验有帮助!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号