收藏 分享(赏)

西工大计算机网络实验三.doc

上传人:精品资料 文档编号:10589818 上传时间:2019-12-02 格式:DOC 页数:14 大小:390.81KB
下载 相关 举报
西工大计算机网络实验三.doc_第1页
第1页 / 共14页
西工大计算机网络实验三.doc_第2页
第2页 / 共14页
西工大计算机网络实验三.doc_第3页
第3页 / 共14页
西工大计算机网络实验三.doc_第4页
第4页 / 共14页
西工大计算机网络实验三.doc_第5页
第5页 / 共14页
点击查看更多>>
资源描述

1、实 验 报 告实验名称-SOCKET 编程一、实验目的(1)加深对 TCP 和 UDP 的理解;(2)实现两台计算机之间 TCP/UDP 通信。二、实验过程原理:socket 是在应用层和传输层之间的一个抽象层,它把 TCP/IP 层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。如下图所示:TCP 通信原理如图:代码:服务器端:#pragma comment(lib, “WS2_32.lib“)#include#include#includeusing namespace std;int main()int i=0;WSADATA wsaData;SOCKET oldSoc

2、ket,newSocket;/客户地址 长度int iLen=0;/发送的数 据长度int iSend=0;/接收的数 据长度int ircv =0;/处世要发 送给客户的信息char buf20=“I am a server“;/接收来自用 户的信息char fromcli512;/客户和服 务器的 SOCKET 地址结构struct sockaddr_in ser,cli;if(WSAStartup(MAKEWORD(2,2),#define DATA_BUFFER 512int main()WSADATA wsaData;SOCKET sClient;char ch;int i=0;ch

3、ar *Serip=“192.168.8.58“;/随着程序所在主机的地址改变而改变int SeriPort=5050;/从服务器接收的 数据的 长度int iLen;/发送的数 据长度int isnd;/接收缓冲 区char bufDATA_BUFFER;/发送缓冲 区char sndbufDATA_BUFFER;/服务器端 SOCKET 地址结构struct sockaddr_in ser;/接收/发送缓冲区的初始化memset(buf,0,sizeof(buf);memset(sndbuf,0,DATA_BUFFER);if(WSAStartup(MAKEWORD(2,2),isnd=s

4、end(sClient,sndbuf,sizeof(sndbuf),0);if(isnd=0)return 0;else if(isnd=SOCKET_ERROR)cout#include #include #define buffer_length 512#pragma comment(lib, “WS2_32.lib“)void main()WSADATA wsadata;SOCKET sSocket;int ilen;int irecv;char recv_bufbuffer_length;char send_bufbuffer_length;/服务器和客 户 SOCKET 地址结构st

5、ruct sockaddr_in seradd,cliadd;if(WSAStartup(MAKEWORD(2,2),return;sSocket=socket(AF_INET,SOCK_DGRAM,0);if(sSocket=INVALID_SOCKET)printf(“socket() failed:%dn“,WSAGetLastError();return;/初始化服 务器 SOCKET 地址结构seradd.sin_family=AF_INET;seradd.sin_port=htons(6666);/seradd.sin_addr.s_addr=htonl(INADDR_ANY);s

6、eradd.sin_addr.s_addr= inet_addr(“0.0.0.0“);if(bind(sSocket,(LPSOCKADDR)int rua;scanf(“%d“, return;ilen=sizeof(cliadd);/初始化接收 缓冲区memset(recv_buf,0,sizeof(recv_buf);irecv=recvfrom(sSocket,recv_buf,buffer_length,0,(struct sockaddr*)if(irecv=SOCKET_ERROR)printf(“接收出错%dn“,WSAGetLastError();int rua;scanf

7、(“%d“, return;else if(irecv=0)return;elseprintf(“n%s-“,recv_buf);printf(“Server received from Client ip:%s,port:%dn“,inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port);while(1)/在此函 数中 cli 为传出参数irecv=recvfrom(sSocket,recv_buf,buffer_length,0,(struct sockaddr*)if(irecv=SOCKET_ERROR)printf(“接收出错%dn“,WSA

8、GetLastError();int rua;scanf(“%d“, return;else if(irecv=0)break;elseprintf(“n%s-“,recv_buf);printf(“Server received from Client ip:%s,port:%dn“,inet_ntoa(cliadd.sin_addr),ntohs(cliadd.sin_port);scanf(“%s“,send_buf);sendto(sSocket,send_buf,sizeof(send_buf),0,(struct sockaddr*)closesocket(sSocket);WSA

9、Cleanup();客户端:#include “stdafx.h“#include#include #define data_buffer 1024void main()WSADATA wsadata;SOCKET sclient;/服务器地址、端口 号char * serip=“192.168.8.58“;int Seriport=6666;char ch=“qita“;/服务器 SOCKET 地址结构长度int ilen;/发送/接收数据大小int isend;int irecv;/要发送给 服务器的数据char send_buf=“hello,I am a client.“;char r

10、ecv_bufdata_buffer;/服务器端的 SOCKET 地址结构struct sockaddr_in seradd, cliadd;/初始化接收 缓冲区memset(recv_buf,0,sizeof(recv_buf);/字符数组 初始化memset(ch,0,sizeof(ch);if(WSAStartup(MAKEWORD(2,2),return;/ 服务器 SOCKET 地址结构初始化seradd.sin_family=AF_INET;seradd.sin_port=htons(Seriport);seradd.sin_addr.s_addr=inet_addr(serip)

11、;cliadd.sin_family=AF_INET;cliadd.sin_port=htons(7777);cliadd.sin_addr.s_addr=inet_addr(“0.0.0.0“);sclient=socket(AF_INET,SOCK_DGRAM,0);if(sclient=INVALID_SOCKET)printf(“build socket failed!n“);return;if(bind(sclient,(LPSOCKADDR)return;/无连接不需要 进行地址 与套接字的绑定,直接发送数据即可ilen=sizeof(seradd);isend=sendto(sc

12、lient,send_buf,sizeof(send_buf),0,(struct sockaddr *)if(isend!=0printf(“客户所发的数据为:%s, 字节数为:%dn“,send_buf,isend);else return;while(1)scanf(“%s“,ch);sendto(sclient,ch,sizeof(ch),0,(struct sockaddr*)irecv=recvfrom(sclient,recv_buf,data_buffer,0,(struct sockaddr*)if(irecv=SOCKET_ERROR)printf(“接收出错%dn“,WS

13、AGetLastError();int rua;scanf(“%d“, return;else if(irecv=0)break;elseprintf(“n%s-“,recv_buf);printf(“Server received from Client ip:%s,port:%dn“,inet_ntoa(seradd.sin_addr),ntohs(seradd.sin_port);closesocket(sclient);WSACleanup();本机上客户端与服务器端通信结果如图:在两台服务器上分别运行服务器端和客户端,结果如图:三、实验中出现的问题实验中,因为对 TCP 和 UDP

14、中的代码不熟悉,编译时也缺少了头文件,导致在编译时一直都没有通过,最后在老师的提醒下知道了错误所在,才能编译通过。思考题:问:127.0.0.1 与本机配置的网络 ip 地址还有 localhost,相互有什么区别?答:localhost 是个域名,不是地址,它可以被配置为任意的 IP 地址,不过通常情况下都指向 127.0.0.1(ipv4)和 :1(ipv6)整个 127.* 网段通常被用作 loopback 网络接口的默认地址,按惯例通常设置为 127.0.0.1。这个地址在其他计算机上不能访问,就算你想访问,访问的也是自己,因为每台带有 TCP/IP 协议栈的设备基本上都有 localhost/127.0.0.1。本机地址通常指的是绑定在物理或虚拟网络接口上的 IP 地址,可供其他设备访问到。四、心得体会在本次试验之前,我对于 socket 编程并不了解,通过向同学请教以及从网上查找资料,对于这个问题我有了初步的了解,能够进行简单的应用,实现了本机以及联机的 TCP 协议以及 UDP 协议通讯。这次实验主要是通过改写代码实现两台计算机之间 tcp/udp 通信,做起来问题不大,但在代码的理解以及使用上有一定的难度,主要都是通过问同学来解决问题。通过这次实验,明白了计算机是如何进行 tcp/udp 通信,更加强化了理论知识。

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报