实验三、WINSOCK套接字编程实验报告(共6页)_第1页
实验三、WINSOCK套接字编程实验报告(共6页)_第2页
实验三、WINSOCK套接字编程实验报告(共6页)_第3页
实验三、WINSOCK套接字编程实验报告(共6页)_第4页
实验三、WINSOCK套接字编程实验报告(共6页)_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、精选优质文档-倾情为你奉上实验三、WINSOCK套接字编程实验报告序号: 姓名: 学号: 成绩: 指导老师: 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文件?答:windows socket的头文件,不包含该头文件,关于socket编程的结构和函数等都不能被调用。(2) 为什么在服务器和客户端程序中要加入#pragma comment(lib,"ws2_32.lib") 语句,如果不加会出现什么问题?答:#pragma   comment(lib, "Ws2_32.lib ")表示链接Ws2_32.lib这个库。 和在工程设置里

3、写上链入Ws2_32.lib的效果一样,不过这种方法写的 程序别人在使用你的代码的时候就不用再设置工程settings了。如果没有这个(3) 为什么在服务器和客户端程序中要使用WSAStartup函数,如果不用,程序会有什么问题?答:使用Socket的程序在使用Socket之前必须调用WSAStartup函数。该函数的第一个参数指明程序请求使用的Socket版本,其中高位字节指明副版本、低位字节指明主版本;操作系统利用第二个参数返回请求的Socket的版本信息。当一个应用程序调用WSAStartup函数时,操作系统根据请求的Socket版本来搜索相应的Socket库,然后绑定找到的Socket

4、库到该应用程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket函数了。该函数执行成功后返回0。如果不用,应用程序将无法调用socket函数。 (4) 修改后的程序完成实现了什么功能,附上修改后的源代码。(修改或填加的代码用波浪线标注,并填加注释),并附上实验截图实现功能:在有双方IP的情况下可以实现窗体界面的交互式聊天功能,可以中英文符号数字随意输入。截图:客户端:服务器:客户端代码:#include "stdafx.h"#include <stdio.h>#include <stdlib.h>#include <errno

5、.h>#include <string.h>#include <sys/types.h>#include <winsock2.h>#include <conio.h> #include <windows.h> #pragma comment(lib,"ws2_32.lib") #define PORT 3490 /* 客户机连接远程主机的端口*/ #define MAXDATASIZE 100 /* 每次可以接收的最大字节*/ int _tmain(int argc, _TCHAR* argv) WORD w

6、VersionRequested; WSADATA wsaData; int err = 0 ,rval = 0 ; 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_STREA

7、M, 0) < 0) printf("Can not create socket!"); exit(2); servaddr.sin_family = AF_INET; servaddr.sin_port = htons(PORT); hp = gethostbyname("113.55.38.221"); /输入服务器ip地址 /根据服务器的网络计算/机名称得到其IP地址等信息 memcpy(char*)&servaddr.sin_addr, (char*)hp->h_addr,hp->h_length); memset(se

8、rvaddr.sin_zero, 0, sizeof(servaddr.sin_zero); /和服务器创建连接 rval = connect(fd, (sockaddr*)&servaddr, sizeof(servaddr); if (rval < 0) /创建连接失败 printf("Can not create connect!"); exit(3); elsewhile(1) memset(buf, 0, 1024); printf("客户端-:"); scanf("%s",&buf); /向服务器发送

9、信息 rval = send(fd, buf, strlen(buf) + 1,0); if(rval < 0) printf("Write error!");if(rval=recv(fd,buf,sizeof(buf),0)<0) perror("reading stream message"); if(rval=0) printf("服务器- :%sn",buf); closesocket(fd); exit(5);服务器代码:#include "stdafx.h"#include <std

10、io.h>#include <stdlib.h>#include <errno.h>#include <string.h>#include <sys/types.h>#include<conio.h> #include<winsock2.h>#include<windows.h> #pragma comment(lib,"ws2_32.lib") #define MYPORT 3490 /*定义用户连接端口*/ #define BACKLOG 10 /*多少等待连接控制*/ #defi

11、ne SERVER_IP_ADDR "113.55.38.221" /输入本机ip地址 /*服务器的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 wVersionRequested; WSADATA wsaData; /*指定socke

12、t版本,否则创建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); /* 使用任意端口命名套接字

13、*/ 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

14、socket"); 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(str

15、uct sockaddr); do msgsock = accept(sock, (struct sockaddr *)&tcpaddr, (int *)&len); if (msgsock = -1) perror("accept"); else while(1)memset(buf, 0, sizeof(buf); if ( (rval = recv(msgsock, buf, sizeof(buf),0) < 0) perror("reading stream message"); if (rval = 0) printf("客户端-%sn", buf);printf("服务器->"); scanf("%s",&buf); rval=send(msgsock,buf,strlen(buf)+1,0); closesocket(msgsock); while (TRUE); /* 因为这个程序已经有了一个无限循环,所以套接字&q

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论