《网络程序设计》实验1

上传人:z**** 文档编号:165496296 上传时间:2022-10-28 格式:DOCX 页数:5 大小:14.85KB
返回 下载 相关 举报
《网络程序设计》实验1_第1页
第1页 / 共5页
《网络程序设计》实验1_第2页
第2页 / 共5页
《网络程序设计》实验1_第3页
第3页 / 共5页
点击查看更多>>
资源描述
苏州大学实验报告院、系 文正学院 年级专业12 物联网姓名 高成波 学号 1217443036课程名称 网络程序设计 成绩指导教师 陆建德 同组实验者 无 实验日期实 验名称 实验一控制台方式 Winsock流套接字客户服务器通信一.实验内容(要求先完成题目,然后上机验证)本实验利用Winsock API进行网络程序设计。参照课本示例,完成控制台方式下流式套接字C/S 通信的客户与服务器端程序,并上机调试。要求可以实现本机两进程间以及在同一网络内不同主机之 间的通信,要求做到:每次客户端向服务器发出请求、报出自己的姓名name,服务器回答一条消息给 客户:“name,你好!你是访问我服务的第num个用户。”,客户端收到该消息后在自己的屏幕上显示。实验报告内容包括主要的实验代码、必要的注释或另外的说明文档以及实验结果与分析。服务器程序#include vstdio.h#define BUF_SZIE 64#include winsock2.h#pragma comment(lib, ws2_32.1ib) int main(int argc, char* argv)/WSADATA 变量服务器套接字客户端套接字WSADATAwsd;SOCKETsServer;SOCKETsClient;charintbufSendBUF_SZIE;发送数据缓冲区 retVal;返回值SOCKADDR_IN addrServ;服务器地址charbufBUF_SZIE; 接收数据缓冲区intn=1;计数初始化套结字动态库if (WSAStartup(MAKEWORD(2,2), & wsd) != 0)printf(WSAStartup failed!n); return 1;创建套接字sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET = sServer)printf(socket failed!n);WSACleanup();释放套接字资源;return -1;服务器套接字地址addrServ.sin_family = AF_INET;addrServ.sin_port = htons(6000); addrServ.sin_addr.s_addr = INADDR_ANY;绑定套接字retVal = bind(sServer, (LPSOCKADDR )&addrServ, sizeof(SOCKADDR_IN); if(SOCKET_ERROR = retVal)printf(bind failed!n);closesocket(sServer); 关闭套接字WSACleanup();释放套接字资源;return -1;开始监听retVal = listen(sServer,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*)&addrClient, & addrClientlen); if(INVALID_SOCKET = sClient)printf(accept failed!n);closesocket(sServer);关闭套接字WSACleanup();释放套接字资源;return -1;接收客户端数据for( ; ; )ZeroMemory(buf, BUF_SZIE); retVal = recv(sClient, buf, BUF_SZIE, 0); if (SOCKET_ERROR = retVal)printf(recv failed!n); closesocket(sServer); closesocket(sClient); WSACleanup();return -1;关闭套接字关闭套接字释放套接字资源;printf(%s,你好!你是连接我的第小个客户。n, buf,n); /输出name向客户端发送数据char strl100,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 (SOCKET_ERROR = retVal)printf(send failed!*); closesocket(sClient);/关闭套接字 closesocket(sServer);WSACleanup(); return -1;n+;退出closesocket(sServer); closesocket(sClient); WSACleanup();return 0;释放套接字资源关闭套接字关闭套接字释放套接字资源;客户端程序#include vstdio.h#define BUF_SZIE 64#include winsock2.h#pragma comment(lib, ws2_32.lib)int main(int argc, char* argv)WSADATAwsd;/WSADATA 变量SOCKETsHost;服务器套接字SOCKADDR_INservAddr;服务器地址charbufBUF_SZIE;接收数据缓冲区charrecvBufBUF_SZIE;发送数据缓冲区intretVal;返回值初始化套结字动态库if (WSAStartup(MAKEWORD(2,2), & wsd) != 0)printf(WSAStartup failed!n); return -1;创建套接字sHost = socket(AF_INET, SOCK_STREAM, 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); int nServAddlen = sizeof(servAddr);连接服务器retVal=connect(sHost,(LPSOCKADDR )&servAddr, sizeof(servAddr); if(SOCKET_ERROR = retVal)printf(connect failed!n);closesocket(sHost); /关闭套接字 WSACleanup();释放套接字资源return -1;向服务器发送数据while (1) ZeroMemory(buf, BUF_SZIE); gets(buf);retVal = send(sHost, buf, strlen(buf), 0);if (SOCKET_ERROR = retVal)printf(send failed!*); 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(sHost); /关闭套接字 WSACleanup();释放套接字资源return 0;实验结果:在客户端窗口输入姓名后,服务器端窗口会返回一个语句告诉客户端是第几个连接到上面 的用户。同时,在客户端也会有相应的反馈语句,并且可以连续输入。实验分析:本次实验的前半部分,即由客户端输入名字,在服务器端显示是第几个用户,这部分做得 比较顺利,但是由于send函数和receive函数的运用不熟练,后面由服务器反馈给客户端并在客户端 显示是第几个客户这部分做的不好,但是后来经过和同学讨论等方法,我还是将程序做出来了,今后 还要加强对一些函数的学习,尤其是要熟练运用。这是学网络编程课以来第一次上机实验,是新奇的, 通过这次实践,让我熟悉了一下网络编程的编程环境,希望对今后的实验有帮助!
展开阅读全文
相关资源
相关搜索

最新文档


当前位置:首页 > 建筑环境 > 建筑资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!