面向连接的客户机服务器程序

上传人:ji****72 文档编号:35938432 上传时间:2018-03-22 格式:DOC 页数:6 大小:176KB
返回 下载 相关 举报
面向连接的客户机服务器程序_第1页
第1页 / 共6页
面向连接的客户机服务器程序_第2页
第2页 / 共6页
面向连接的客户机服务器程序_第3页
第3页 / 共6页
面向连接的客户机服务器程序_第4页
第4页 / 共6页
面向连接的客户机服务器程序_第5页
第5页 / 共6页
点击查看更多>>
资源描述

《面向连接的客户机服务器程序》由会员分享,可在线阅读,更多相关《面向连接的客户机服务器程序(6页珍藏版)》请在金锄头文库上搜索。

1、实实 验验 报报 告告(2011 2012 学年第学年第 2 学期)学期)课程名称:课程名称: 网络程序设计网络程序设计 姓姓 名:名: xxxx 学学 院:院: xxxx 专专 业:业: xxxxxx 年年 级:级: xxxxx 学学 号:号: xxxxxxxx 实实 验验 报报 告告2012 年年 3 月月 7 日日 第第 3-4 节节 xxx 楼楼 426 号室号室 进入实验室进入实验室 时间时间进入时仪器进入时仪器 设备状况设备状况离开实验室离开实验室 时间时间离开时仪器离开时仪器 设备状况设备状况机器号机器号9:50 良好良好 11:20 良好良好 4-23实验项目名称实验项目名称面

2、向连接的客户机面向连接的客户机/服务器程序服务器程序一、实验目的一、实验目的 1了解流套接字的函数功能,掌握使用套接字 API 的方法; 2掌握基于流套接字的客户机/服务器编程模型; 3进一步深入了解 TCP 协议的原理。二、实验内容二、实验内容 在 Windows 环境下编写并调试一个基于流套接字的客户机/服务器程序,实现从客户 机到服务器的文件传输。三、实验过程(步骤)及结果三、实验过程(步骤)及结果1. 写出程序设计的基本思路写出程序设计的基本思路2. 服务器端代码服务器端代码#include “stdafx.h“ #define BUF_SZIE 64 #include “winsoc

3、k2.h“ #pragma comment(lib, “ws2_32.lib“)int main(int argc, char* argv) WSADATAwsd; SOCKETsServer; SOCKETsClient; SOCKADDR_INaddrServ; charbufBUF_SZIE; intretVal;if (WSAStartup(MAKEWORD(2,2), return 1; /创建套接字 sServer = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if(INVALID_SOCKET = sServer) printf(“so

4、cket failed!n“); WSACleanup(); return -1; /服务器套接字地址 addrServ.sin_family = AF_INET; addrServ.sin_port = htons(4999); addrServ.sin_addr.s_addr = INADDR_ANY; /绑定套接字 retVal = bind(sServer, (LPSOCKADDR) if(SOCKET_ERROR = retVal) printf(“bind failed!n“); closesocket(sServer); WSACleanup(); return -1; /开始监

5、听 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*) if(INVALID_SOCKET = sClient) printf(“accept failed!n“);

6、 closesocket(sServer); WSACleanup(); return -1; 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(“%sn“, buf);closesocket(sServer); closesocket(sClient);

7、 WSACleanup(); return 0; 3客户端代码客户端代码 #include “stdafx.h“ #define BUF_SZIE 64 #include “winsock2.h“ #pragma comment(lib, “ws2_32.lib“)int main(int argc, char* argv) WSADATAwsd; SOCKETsHost; SOCKADDR_INservAddr; charbufBUF_SZIE; intretVal;if (WSAStartup(MAKEWORD(2,2), return -1; /创建套接字 sHost = socket(

8、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“); servAddr.sin_port = htons(short)4999); int nServAddlen = sizeof(servAddr);retVal=connect(sHost,(

9、LPSOCKADDR) if(SOCKET_ERROR = retVal) printf(“connect failed!n“); closesocket(sHost); WSACleanup(); return -1; /向服务器发送数据 ZeroMemory(buf, BUF_SZIE); strcpy(buf, “MyTCP“); retVal = send(sHost, buf, strlen(buf), 0); if (SOCKET_ERROR = retVal) printf(“send failed!n“); closesocket(sHost); WSACleanup(); r

10、eturn -1;/退出 closesocket(sHost); WSACleanup(); return 0; 四、存在问题及解决方法四、存在问题及解决方法编写传送文件方面程序有些障碍,就用传送数据代替了。五、思考题五、思考题 1在服务器端创建的套接字有几种?各自的特点是什么? 答:有三种,数据报套接字:提供无连接的不保证可靠的独立的数据报传输服务。 流式套接字:提供双向的、有序的、无重复的、无记录边界的、可靠地数据流传输服务。 原始式套接字:允许直接访问较低层次的协议,用于检验新的协议的实现。2Listen 函数的第二个参数的作用是什么? 答:规定监听套接字所能接受的最多的客户端的连接请求数,一旦客户机端的连接请求 到来,就将该请求先接纳到请求缓冲区队列中等待。如果队列已满时,就拒绝后来的请求。3服务器端显示客户端的 IP 地址、端口号,应如何实现? 答:服务器端 accept()等待客户端的链接,当连接成功后,accept 拷贝客户端的地址信 息到 sockaddr_in 里面,当 sockaddr_in.sin_family=AF_INET 时,sockaddr=sockaddr_in,这 时就可以用 inet_ntoa()来得到 Ip 地址和端口号了。评语:评语:

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

当前位置:首页 > 行业资料 > 其它行业文档

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