ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:135.61KB ,
资源ID:26992988      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26992988.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(计算机网络实验二.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

计算机网络实验二.docx

1、计算机网络实验二实验报告学院(系)名称:计算机与通信工程学院姓名Sky学号专业计算机科学与技术班级2班实验名称基于TCP/UDP的Socket编程课程名称计算机网络课程代码0662016实验时间2016年4月18日14:00-15:40实验地点7-219批改意见成绩教师签字: 1. 实验目的了解套接字(socket)实现原理。通过编成理解TCP、UDP原理,加深对传输层的功能理解2. 实验环境 VC+6.03. 实验过程记录(源程序、测试用例、测试结果及心得体会等)传送字符串:Clinet端源码:#define WIN32_LEAN_AND_MEAN#include #include #inc

2、lude #include #pragma comment(lib, ws2_32.lib) #define DEFAULT_PORT 2007#define DEFAULT_PROTO SOCK_STREAM void Usage(char *progname) fprintf(stderr,Usage: %s -p protocol -n server name/IP -e port_num -l iterationsn, progname); fprintf(stderr,Where:ntprotocol is one of TCP or UDPn); fprintf(stderr,t-

3、 server is the IP address or name of servern); fprintf(stderr,t- port_num is the port to listen onn); fprintf(stderr,t- iterations is the number of loops to execute.n); fprintf(stderr,t- (-l by itself makes client run in an infinite loop,n); fprintf(stderr,t- Hit Ctrl-C to terminate it)n); fprintf(s

4、tderr,t- The defaults are TCP , localhost and 2007n); WSACleanup(); exit(1);int main(int argc, char *argv) char Buffer128; char *server_name= localhost; unsigned short port = DEFAULT_PORT; int retval, loopflag = 0; int i, loopcount, maxloop=-1; unsigned int addr; int socket_type = DEFAULT_PROTO; str

5、uct sockaddr_in server; struct hostent *hp; WSADATA wsaData; SOCKET conn_socket; if (argc 1) for(i=1; ih_addr, hp-h_length); server.sin_family = hp-h_addrtype; server.sin_port = htons(port); conn_socket = socket(AF_INET, socket_type, 0); /* Open a socket */ if (conn_socket h_name); if (connect(conn_

6、socket, (struct sockaddr*)&server, sizeof(server) = SOCKET_ERROR) fprintf(stderr,Client: connect() failed: %dn, WSAGetLastError(); WSACleanup(); return -1; else printf(Client: connect() is OK.n); / Test sending some string loopcount = 0; while(1) wsprintf(Buffer,This is a test message from client #%

7、d, loopcount+); retval = send(conn_socket, Buffer, sizeof(Buffer), 0); if (retval = SOCKET_ERROR) fprintf(stderr,Client: send() failed: error %d.n, WSAGetLastError(); WSACleanup(); return -1; else printf(Client: send() is OK.n); printf(Client: Sent data %sn, Buffer); retval = recv(conn_socket, Buffe

8、r, sizeof(Buffer), 0); if (retval = SOCKET_ERROR) fprintf(stderr,Client: recv() failed: error %d.n, WSAGetLastError(); closesocket(conn_socket); WSACleanup(); return -1; else printf(Client: recv() is OK.n); / We are not likely to see this with UDP, since there is no / connection established. if (ret

9、val = 0) printf(Client: Server closed connection.n); closesocket(conn_socket); WSACleanup(); return -1; printf(Client: Received %d bytes, data %s from server.n, retval, Buffer); if (!loopflag) printf(Client: Terminating connection.n); break; else if (loopcount = maxloop) & (maxloop 0) break; closeso

10、cket(conn_socket); WSACleanup();return 0;Server端源码:#define WIN32_LEAN_AND_MEAN#include #include #include #include #pragma comment(lib, ws2_32.lib)#define DEFAULT_PORT 2007/ default TCP socket type#define DEFAULT_PROTO SOCK_STREAMvoid Usage(char *progname) fprintf(stderr,Usage: %s -p protocol -e port

11、_num -i ip_addressn, progname); fprintf(stderr,Where:nt- protocol is one of TCP or UDPn); fprintf(stderr,t- port_num is the port to listen onn); fprintf(stderr,t- ip_address is the ip address (in dottedn); fprintf(stderr,t decimal notation) to bind to. But it is not useful here.n); fprintf(stderr,t-

12、 Hit Ctrl-C to terminate server program.n); fprintf(stderr,t- The defaults are TCP, 2007 and INADDR_ANY.n); WSACleanup(); exit(1); int main(int argc, char *argv) char Buffer128; char *ip_address= NULL; unsigned short port=DEFAULT_PORT; int retval; int fromlen; int i; int socket_type = DEFAULT_PROTO;

13、 struct sockaddr_in local, from; WSADATA wsaData; SOCKET listen_socket, msgsock; /* Parse arguments, if there are arguments supplied */ if (argc 1) for(i=1; iargc; i+) / switches or options. if (argvi0 = -) | (argvi0 = /) / Change to lower.if any switch(tolower(argvi1) / if -p or /p case p: if (!str

14、icmp(argvi+1, TCP) socket_type = SOCK_STREAM; else if (!stricmp(argvi+1, UDP) socket_type = SOCK_DGRAM; else Usage(argv0); i+; break; / if -i or /i, for server it is not so useful. case i: ip_address = argv+i; break; / if -e or /e case e: port = atoi(argv+i); break; / No match. default: Usage(argv0)

15、; break; else Usage(argv0); / Request Winsock version 2.2 if (retval = WSAStartup(0x202, &wsaData) != 0) fprintf(stderr,Server: WSAStartup() failed with error %dn, retval); WSACleanup(); return -1; else printf(Server: WSAStartup() is OK.n); if (port = 0) Usage(argv0); local.sin_family = AF_INET; loc

16、al.sin_addr.s_addr = (!ip_address) ? INADDR_ANY:inet_addr(ip_address); /* Port MUST be in Network Byte Order */ local.sin_port = htons(port); / TCP socket listen_socket = socket(AF_INET, socket_type,0); if (listen_socket = INVALID_SOCKET) fprintf(stderr,Server: socket() failed with error %dn, WSAGet

17、LastError(); WSACleanup(); return -1; else printf(Server: socket() is OK.n); / bind() associates a local address and port combination with the socket just created. / This is most useful when the application is a / server that has a well-known port that clients know about in advance. if (bind(listen_

18、socket, (struct sockaddr*)&local, sizeof(local) = SOCKET_ERROR) fprintf(stderr,Server: bind() failed with error %dn, WSAGetLastError(); WSACleanup(); return -1; else printf(Server: bind() is OK.n); / So far, everything we did was applicable to TCP as well as UDP. / However, there are certain steps t

19、hat do not work when the server is / using UDP. We cannot listen() on a UDP socket. if (socket_type != SOCK_DGRAM) if (listen(listen_socket,5) = SOCKET_ERROR) fprintf(stderr,Server: listen() failed with error %dn, WSAGetLastError(); WSACleanup(); return -1; else printf(Server: listen() is OK.n); pri

20、ntf(Server: %s: Im listening and waiting connectionnon port %d, protocol %sn, argv0, port, (socket_type = SOCK_STREAM)?TCP:UDP); while(1) fromlen =sizeof(from); / accept() doesnt make sense on UDP, since we do not listen() if (socket_type != SOCK_DGRAM) msgsock = accept(listen_socket, (struct sockad

21、dr*)&from, &fromlen); if (msgsock = INVALID_SOCKET) fprintf(stderr,Server: accept() error %dn, WSAGetLastError(); WSACleanup(); return -1; else printf(Server: accept() is OK.n); printf(Server: accepted connection from %s, port %dn, inet_ntoa(from.sin_addr), htons(from.sin_port) ; else msgsock = list

22、en_socket; / In the case of SOCK_STREAM, the server can do recv() and send() on / the accepted socket and then close it. / However, for SOCK_DGRAM (UDP), the server will do recvfrom() and sendto() in a loop. if (socket_type != SOCK_DGRAM) retval = recv(msgsock, Buffer, sizeof(Buffer), 0); else retva

23、l = recvfrom(msgsock,Buffer, sizeof(Buffer), 0, (struct sockaddr *)&from, &fromlen); printf(Server: Received datagram from %sn, inet_ntoa(from.sin_addr); if (retval = SOCKET_ERROR) fprintf(stderr,Server: recv() failed: error %dn, WSAGetLastError(); closesocket(msgsock); continue; else printf(Server:

24、 recv() is OK.n); if (retval = 0) printf(Server: Client closed connection.n); closesocket(msgsock); continue; printf(Server: Received %d bytes, data %s from clientn, retval, Buffer); printf(Server: Echoing the same data back to client.n); if (socket_type != SOCK_DGRAM) retval = send(msgsock, Buffer,

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1