资源预览内容
第1页 / 共10页
第2页 / 共10页
第3页 / 共10页
第4页 / 共10页
第5页 / 共10页
第6页 / 共10页
第7页 / 共10页
第8页 / 共10页
第9页 / 共10页
第10页 / 共10页
亲,该文档总共10页全部预览完了,如果喜欢就下载吧!
资源描述
网络编程实验报告网络编程实验报告python_socketpython_socket 网络编程网络编程一、一、TCPTCP 编程编程一一 、建立一个、建立一个 TCPTCP 服务器连接需要服务器连接需要 6 6 个步骤:个步骤:1.创建 socket 对象。调用 socket 构造函数:socket=socket.socket(familly,type)family 的值可以是 AF_UNIX(Unix 域,用于同一台机器上的进程间通讯),也可以是AF_INET 对于IPV4协议的TCP和 UDP , 至于type参数, SOCK_STREAM流套接字或者 SOCK_DGRAM数据报文套接字,SOCK_RAWraw 套接字 。2.将 socket 绑定指派到指定地址上,socket.bind(address)address 必须是一个双元素元组,(host,port),主机名或者 ip 地址+端口号。如果端口号正在被使用或者保留,或者主机名或ip 地址错误,则引发socke.error 异常。3.绑定后,必须准备好套接字,以便接受连接请求。socket.listen(backlog)backlog 指定了最多连接数,至少为 1,接到连接请求后,这些请求必须排队,如果队列已满,则拒绝请求。4.服务器套接字通过 socket 的 accept 方法等待客户请求一个连接:connection,address=socket.accept()调用 accept 方法时,socket 会进入waiting或阻塞状态。客户请求连接时,方法建立连接并返回服务器。 accept 方法返回一个含有俩个元素的元组,形如(connection,address)。第一个元素connection是新的 socket 对象,服务器通过它与客户通信;第二个元素address是客户的 internet 地址。5.处理阶段,服务器和客户通过 send 和 recv 方法通信传输数据 。服务器调用 send,并采用字符串形式向客户发送信息。send 方法返回已发送的字符个数。服务器使用 recv 方法从客户接受信息。调用 recv 时,必须指定一个整数来控制本次调用所接受的最大数据量。recv 方法在接受数据时会进入blocket状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超过 recv 所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv 时,多余的数据会从缓冲区删除。6.传输结束,服务器调用 socket 的 close 方法以关闭连接。二二 、建立一个、建立一个 TCPTCP 客户端连接则需要客户端连接则需要 4 4 个步骤:个步骤:1.创建一个 socket 以连接服务器 socket=socket.socket(family,type)2.使用 socket 的 connect 方法连接服务器 socket.connect(host,port)3.客户和服务器通过 send 和 recv 方法通信。4.结束后,客户通过调用 socket 的 close 方法来关闭连接。二,建立二,建立 TCPTCP 连接连接首先建立服务器程序。创建套接字,绑定套接字,开始监听,就是一个while 循环一直监听有没有消息连接。客户端程序创建套接字,连接,等待输入,发送。同一台电脑结果在两个 shell 中演示。局域网内交互测试信息:作为服务器,来自 IP 地址为:192.168.1.101 客户端的消息。三,建立三,建立 UDPUDP 连接连接UDP 的建立过程基本和 TCP 一样,看以下代码异同,这里不在熬述。建立服务器程序创建套接字,开始监听,就是一个 while 循环一直监听有没有消息连接。建立客户端程序创建套接字,while 循环一直监听有没有消息连接。两个 shell 中演示显示数据传送局域网内的信息交互:作为服务器,来自 IP 地址为 192.168.1.101 的消息。作为客户端,向 IP 地址为 192.168.1.101 的服务器发送消息。总结:一般的总结:一般的 TCPTCP 和和 UDPUDP 连接服务器和客户端的内容和步骤。连接服务器和客户端的内容和步骤。TCP 服务器端:1 创建套接字,绑定套接字到当地地址,然后开始监听连接。就是socket,bind,listen。2 进入循环,不断接受客户端的连接请求,然后接收传来的数据,当然也可以发送给对方数据。就是 accept 一个连接,然后 recv 数据。3 接收完毕可以关闭套接字,close。这个过程的伪代码如下:ss=socket()#创建服务器套接字ss.bind()#把本地地址绑到套接字上ss.listen()#监听连接inf_loop:#服务器无限循环cs=ss.accept()#接受客户端的连接comm._loop:#通信循环cs.recv()/cs.send()#对话cs.close()#关闭客户套接字ss.close()#关闭服务器套接字TCP 客户端:1 创建套接字,然后连接远端地址,socket ,connect。2 建立连接之后开始发送数据。 Send data , 当然可以从缓冲区读取服务器发来的数据。RecvBUFF3 完毕后,关闭套接字。Close伪代码如下:cs=socket()#创建客户套接字cs.connect()#尝试连接服务器comm._loop:#通信循环cs.send()/cs.recv()#对话cs.close()#关闭套接字UDP 服务器端:1 创建套接字,并绑定到当地地址 socket,bing2 直接接收数据从 buffer。Recvfrom ,这个函数接受到数据,和sender 的地址主机号,端口号 ,当然也可以发送数据到客户端,用sendtodata,addr3 关闭套接字 close伪代码:Ss=socket()#创建套接字ss.bind()#绑定inf_loop:#无限循环ss.recvfrom()/sendto()#对话ss.close()#关闭套接字UDP 客户端:1 创建套接字,socket2 进入循环,发送接收数据 sendto ,recvfrom3 关闭套接字 close伪代码:Cs=socket()#创建Comm_loop:#循环接收发送Cs.sendto()/recvfrom() #对话Cs.close()#关闭Send sendto recvrecvfrom我们发现在 TCP 连接中我们发生接收数据都是用的send 和 recv 方法, 而在 UDP中用的 sendto和 recvfrom 。这两对方法实现的作用差不多,但是参数有所不同,TCP 中,senddata和 recvbuffer ,因为在 TCP 中,传输数据之前连接已经建立,也就是说我们知道给谁发,或者收谁的数据。而在 UDP 中用,recvfrombuffer和 sendtodata,addr ,recvfrom 可以接受到 sender 的 addr,然后发送时, 根据 addr 发送。因为UDP 不是面向连接的,所以我们必须知道这个数据要发给谁,它的地址什么。四,四,UDPUDP 广播广播1 1,工作原理,工作原理在 UDP 广播通讯模式下, 一个单独的数据包拷贝发送给网络上所有主机。当不能明确具体的服务器,而又要求该服务时,UDP 广播提供了传输不区分种类的消息的便捷方式。在多数情况下 UDP 广播仅仅作为本地网络通信形式。 受限的广播地址是 255.255.255.255。该地址用于主机配置过程中 IP 数据报的目的地址,此时,主机可能还不知道它所在网络的网络掩码,甚至连它的 IP 地址也不知道。在任何情况下,路由器都不转发目的地址为受限广播地址的数据报, 这样的数据报仅出现在本地网络中。 已知网络主机的 IP 地址和子网掩码,可以算得指向主机所在子网的广播。 子网广播地址 = 主机 IP “或” 子网掩码取反 。2 2,拓扑结构,拓扑结构
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号