计算机网络原理实验三winsock套接字编程实验报告云大软件学院(共8页).doc
《计算机网络原理实验三winsock套接字编程实验报告云大软件学院(共8页).doc》由会员分享,可在线阅读,更多相关《计算机网络原理实验三winsock套接字编程实验报告云大软件学院(共8页).doc(8页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上实验三、WINSOCK套接字编程实验报告序号: 10 姓名: 学号: 成绩 指导老师: 1实验目的:用C或JAVA语言编写客户端、服务器程序,实现基于TCP或UDP的网络通信数据传输服务,熟悉基于TCP或UDP的Socket编程原理。2实验环境:建立在TCP/IP 网络体系结构之上计算机网络实验环境。各计算机除了安装TCP/IP 软件外,还安装了TCP/IP 开发系统。计算机具备Windows环境中套接字socket 的编程接口功能,可为用户提供全网范围的进程通信功能。3实验指导:参见套接字编程实验指导4实验步骤(1)运行指导书中给出的参考程序,分析实验结果,并回答问
2、题(1)-(3)(2)根据给定参考程序修改代码,完善修改服务器和客户端的功能。并回答问题(4)-(5)5实验结果分析(1) 为什么在服务器和客户端要包含winsock2.h文件?答:这是系统自定义的“宏”,其中还包含了许多自定义的类型,如果不包含该文件,程序中会有许多类型无法识别。(2) 为什么在服务器和客户端程序中要加入#pragma comment(lib,ws2_32.lib) 语句,如果不加会出现什么问题?答:这句话的意思是链接“ws2_32.lib”这个库,如果不加就链接不到这个库。(3) 为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用程序会有什么问题?答:为了
3、在应用程序当中调用任何一个Winsock API函数,首先第一件事情就是必须通过WSAStartup函数完成对Winsock服务的初始化,因此需要使用WSAStartup函数。如果不用,程序将无法调用Socket库中的其他函数。(4) 修改后的程序完成实现了什么功能,附上修改后的源代码。(修改或填加的代码用波浪线标注,并填加注释),并附上实验截图#include stdafx.h#include #include #include #include #include #include #include #include #pragma comment(lib,ws2_32.lib) #defi
4、ne MYPORT 3490 /*定义用户连接端口*/ #define BACKLOG 10 /*多少等待连接控制*/ #define SERVER_IP_ADDR 113.55.16.10 /*服务器的IP地址*/int _tmain(int argc, _TCHAR* argv) SOCKET sock, msgsock; int length = 0; struct sockaddr_in server; struct sockaddr tcpaddr; char buf1024 = ; int rval= 0, len= 0, err = 0; WORD wVersionRequest
5、ed; WSADATA wsaData; /*指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind时会失败*/ wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return -1; /* 建立套接字*/ sock = socket(AF_INET, SOCK_STREAM, 0); if (sock 0) perror(opening stream socket); exit(1); /* 使用
6、任意端口命名套接字*/ server.sin_family = AF_INET; server.sin_port = htons(MYPORT); server.sin_addr.s_addr = inet_addr(SERVER_IP_ADDR); memset(server.sin_zero, 0, sizeof(server.sin_zero); /将服务器地址与socket绑定在一起 rval = bind(sock, (struct sockaddr *)&server, sizeof(server); if (rval 0) perror(binding stream socket
7、); exit(1); / 找出指定的端口号并打印出来 length = sizeof(server); if (getsockname(sock, (struct sockaddr *)&server, &length) 0) perror(getting socket name); exit(1); printf(socket port #%dn, ntohs(server.sin_port); / 开始接收连接,最大请求数为 listen(sock, 5); len = sizeof(struct sockaddr); do msgsock = accept(sock, (struct
8、sockaddr *)&tcpaddr, (int *)&len); if (msgsock = -1) perror(accept); else memset(buf, 0, sizeof(buf); if ( (rval = recv(msgsock, buf, sizeof(buf),0) %sn, buf); closesocket(msgsock); while (TRUE); /* 因为这个程序已经有了一个无限循环,所以套接字sock从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。*/ closesocket(msgsock);return 0;客户端程
9、序代码#include stdafx.h#include #include #include #include #include #include #include #include #pragma comment(lib,ws2_32.lib) #define PORT 3490 /* 客户机连接远程主机的端口*/ #define MAXDATASIZE 100 /* 每次可以接收的最大字节*/ int _tmain(int argc, _TCHAR* argv) WORD wVersionRequested; WSADATA wsaData; int err = 0 ,rval = 0 ;
10、 SOCKET fd; struct sockaddr_in servaddr; struct hostent* hp; char buf1024 = ; wVersionRequested = MAKEWORD( 2, 2 ); err = WSAStartup( wVersionRequested, &wsaData ); if ( err != 0 ) return -1; if (fd = socket(AF_INET, SOCK_STREAM, 0) h_addr,hp-h_length); memset(servaddr.sin_zero, 0, sizeof(servaddr.s
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机网络 原理 实验 winsock 套接 编程 报告 软件 学院
限制150内