《实验三WINSOCK套接字编程实验报告.doc》由会员分享,可在线阅读,更多相关《实验三WINSOCK套接字编程实验报告.doc(6页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验三SOCK套接字编程实验报告 并回答问题(4)-( 5)四、实验结果分析(1)为什么在服务器和客户端要包含文件?答:因为无论服务器端程序还是客户端程序都要建立 socket,如 果不包含文件就无法创建socket,没有socket服务器与客户端就 无法通信。(2)为什么在服务器和客户端程序中要加入 #pragma comment (lib,“”) 语句,如果不加会出现什么问题?答:因为要告诉链接器生成e_e时链接这个库中的函数。当然也可百度文库-百度文库-让每个人平等地提升自我#以通过别的方法告诉链接器。就是让程序在链接的时候将这个文 件链接进来,如果没有这句话,你也没有在工程的Class
2、 Wizerd选项卡的Link选项卡中加入这个文件的时候,链接就会提醒某些 函数没有被链接到!有了这个文件,一般就是提供某一些函数的 实现代码,只不过不是以字符形式存储的!为什么在服务器和客户端程序中要使用 WSAStartup函数,如果 不用,程序会有什么问题?答:WSADATAwsaData;wVersio nRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersi on Requested, wsaData );第一个参数是版本号即版本,第二个参数返回socket的版本信息操作系统利用第二个参数返回请求的 Socket的版本信息。当 一个
3、应用程序调用Startup函数时,操作系统根据请求的Socket 版本来搜索相应的Socket库,然后绑定找到的Socket库到该应用 程序中。以后应用程序就可以调用所请求的Socket库中的其它Socket 函数了。为了在应用程序当中调用任何一个 sock API函数,首先第 一件事情就是必须通过WSAStartup函数完成对 sock服务的初 始化,因此需要调用 WSAStartup函数。使用Socket的程序在使用 Socket之前必须调用WSAStartup函数,如果不调用后面socket无 法执行。百度文库-百度文库-让每个人平等地提升自我#(修修改后的程序完成实现了什么功能,附上修
4、改后的源代码。改或填加的代码用波浪线标注,并填加注释),并附上实验截图 客户端:实现本地ip自动检测,并且由用户键入想要通信的服务器地址,实现大小写互相 转换后送达服务端。源代码如下:(修#i nclude “”#in clude#inc|ude.#in elude #in elude #in elude #in elude #pragma comme nt(lib,“”)#define PORT 3490 /_客户机连接远程主机的端口_/#defi ne MA_DATASIZE 100 /_每次可以接收的最大字节 _/#.defineTRUEJ.int _tmain(int argc, _T
5、CHAR_argv) WORDWSADATA int SOCKETwVers ion Requested; wsaData;WORDWSADATA int SOCKETerr = 0 ,rval = 0 ;fd;servaddr; hp;buf1024=“”servaddr; hp;buf1024=“”charcharn.ame.255)_i.ptoi.p?.0.1,no;/_进行本地IP检测_/一 PHOSTENT host info;,w 八/ersionRequested = R 力AKE 八/ORD( 2, 2 );err = WSAStartup( wVers ion Request
6、ed, wsaData );讦(A/SAStartiip( MAKEW/ORD(2,0), wsaData ) = 0 ) if( gethostname .( n ame, sizeof( name) = 0) if(hostinfcu=.gihosbyname(name)l= NULL) -ip = inet ntoa (_(struct in addr _)_hostinfo-h addr list);K“一WSACleanup();printf(“本机IP地址为 s,输入服务器 IP地址n”,ip);百度文库-百度文库-让每个人平等地提升自我#gets(toip);/_循环保证多次向服
7、务器端发送信息_/doif ( err != 0 )return -1;if (fd = socket(AFN ET, SOCK_STREAM, 0) #in elude #pragma eomme nt(lib,“”)#defi ne MYPORT3490#defi ne BACKLOG#define SERVER IP ADDRSOCKETint10“”/_服务器的IP地址_/ soek, msgsoek;len gth = 0;/_定义用户连接端口_/_多少等待连接控制_/struct soekaddr instruct soekaddreharintWORDWSADATAserver;
8、tepaddr;buf1024#inelude #in elude #pragma eomme nt(lib,“”)#defi ne MYPORT3490#defi ne BACKLOG#define SERVER IP ADDRSOCKETint10“”/_服务器的IP地址_/ soek, msgsoek;len gth = 0;/_定义用户连接端口_/_多少等待连接控制_/struct soekaddr instruct soekaddreharintWORDWSADATAserver;tepaddr;buf1024三 ”“,bufree1024三”; rval= 0, le n三 0,
9、err = 0;wVers ion Requested;wsaData;printf(”无法连接”);iime(timep)4p=geaJtjm.e(timep);printf(”无法连接”);iime(timep)4p=geaJtjm.e(timep);tim,e t timep; struct Im瓷p;./_计时操作_/ void userl nput(void_)memset(bufree, 0, sizeof(bufree):if ( (rval = reev(msgsoek, bufree, sizeof(buf),0) tm hour,D-tm min,p-tm sec,bufr
10、ec); while (1);int _tmain(int argc, _TCHAR_argv)/_指定socket版本,否则创建socket失败,即使创建socket返回值不为-1,但是bind时会 失败_/wVersio nRequested = MAKEWORD( 2, 2 );err = WSAStartup( wVersio nRequested, wsaData );if ( err != 0 )return -1;/_建立套接字_/sock = socket(AF_INET, SOCK_STREAM, 0);if (sock tm二hour,p-_tm二min p-tm_sec,
11、bufrec); _prin tf(“sn”, buf);closesocket(msgsock); while (TRUE);/_因为这个程序已经有了一个无限循环,所以套接字“sock”从来不显式关闭。然而,当进程被杀死或正常终止时,所有套接字都将自动地被关闭。_/closesocket(msgsock);return 0;桂 口 号.为 3M3O26 : 22: 7卜 ? alCdi9 f QHl JLMNoPqirt ae 22;S2 UmWmV_:11h?lloMORLD请详细说明此实验在设计及运行时遇到的问题和解决办法,及实验体会及建议。在实验设计的过程中会遇到很多的问题,如实现各种功能时,实现顺序的问题,以及时间计算过程中的各种指针存在的存储空间的冲百度文库-百度文库-让每个人平等地提升自我#突问题。在调用各种函数的过程中会遇到不能使用的状况,是因为源程序中没有包含使用该函数的头文件。实验过程中不能正确的认识各 个函数的功能,以及灵活地使用结构体,对建立连接的过程没有一个 很清楚地把握,通过查询各种资料和同学之间相互交流, 解决了一些 难以下手的问题,通过本次试验,socket编程有了一个深刻的了解, 对其过程的建立也有了一个大致的了解。第 6 页 共 6 页
限制150内