python socket 网络编程实验报告

python socket 网络编程实验报告


2024年6月1日发(作者:)

网络编程实验报告

python_socket 网络编程

一、TCP编程

(一)、建立一个TCP服务器连接需要6个步骤:

1. 创建socket对象。调用socket构造函数:

socket=(familly,type)

family的值可以是AF_UNIX(Unix域,用于同一台机器上的进程间通讯),也可

以是AF_INET(对于IPV4协议的TCP和 UDP),至于type参数,SOCK_STREAM

(流套接字)或者 SOCK_DGRAM(数据报文套接字),SOCK_RAW(raw套接

字)。

2. 将socket绑定(指派)到指定地址上,(address)

address必须是一个双元素元组,((host,port)),主机名或者ip地址+端口号。如果端

口号正在被使用或者保留,或者主机名或ip地址错误,则引发异常。

3. 绑定后,必须准备好套接字,以便接受连接请求。

(backlog)

backlog指定了最多连接数,至少为1,接到连接请求后,这些请求必须排队,

如果队列已满,则拒绝请求。

4. 服务器套接字通过socket的accept方法等待客户请求一个连接:

connection,address=()

调用accept方法时,socket会进入'waiting'(或阻塞)状态。客户请求连接时,

方法建立连接并返回服务器。accept方法返回一个含有俩个元素的元组,形如

(connection,address)。第一个元素(connection)是新的socket对象,服务器通过

它与客户通信;第二个元素(address)是客户的internet地址。

5. 处理阶段,服务器和客户通过send和recv方法通信(传输数据)。

服务器调用send,并采用字符串形式向客户发送信息。send方法返回已发送的

字符个数。服务器使用recv方法从客户接受信息。调用recv时,必须指定一个

整数来控制本次调用所接受的最大数据量。recv方法在接受数据时会进入

'blocket'状态,最后返回一个字符串,用它来表示收到的数据。如果发送的量超

过recv所允许,数据会被截断。多余的数据将缓冲于接受端。以后调用recv时,

多余的数据会从缓冲区删除。

6. 传输结束,服务器调用socket的close方法以关闭连接。

(二)、建立一个TCP客户端连接则需要4个步骤:

1. 创建一个socket以连接服务器 socket=(family,type)

2. 使用socket的connect方法连接服务器 t((host,port))

3. 客户和服务器通过send和recv方法通信。

4. 结束后,客户通过调用socket的close方法来关闭连接。

二,建立TCP连接

首先建立服务器程序。

创建套接字,绑定套接字,开始监听,就是一个while循环一直监听有没有消息

连接。

客户端程序

创建套接字,连接,等待输入,发送。

同一台电脑结果在两个shell中演示。

局域网内交互测试信息:

作为服务器,来自IP地址为:192.168.1.101客户端的消息。

作为客户端,发送消息到IP地址为:192.168.1.101服务器

三,建立UDP连接

UDP的建立过程基本和TCP一样,看以下代码异同,这里不在熬述。

建立服务器程序

创建套接字,开始监听,就是一个while循环一直监听有没有消息连接。

建立客户端程序

创建套接字,while循环一直监听有没有消息连接。

两个shell中演示显示数据传送

局域网内的信息交互:

作为服务器,来自IP地址为192.168.1.101的消息。

作为客户端,向IP地址为192.168.1.101的服务器发送消息。

总结:一般的TCP和UDP连接服务器和客户端的内容和步骤。

TCP服务器端:

1 创建套接字,绑定套接字到当地地址,然后开始监听连接。就是socket,bind,listen。

2 进入循环,不断接受客户端的连接请求,然后接收传来的数据,当然也可以发送给对

方数据。就是accept一个连接,然后recv数据。

3 接收完毕可以关闭套接字,close。

这个过程的伪代码如下:

ss=socket() #创建服务器套接字

() #把本地地址绑到套接字上

() #监听连接

inf_loop: #服务器无限循环

cs=() #接受客户端的连接

comm._loop: #通信循环

()/() #对话

() #关闭客户套接字

() #关闭服务器套接字

TCP客户端:

1 创建套接字,然后连接远端地址,socket ,connect。

2 建立连接之后开始发送数据。Send(data),当然可以从缓冲区读取服务器发来的数据。

Recv(BUFF)

3 完毕后,关闭套接字。Close

伪代码如下:

cs=socket() #创建客户套接字

t() #尝试连接服务器

comm._loop: #通信循环

()/() #对话

() #关闭套接字

UDP服务器端:

1 创建套接字,并绑定到当地地址 socket,bing

2 直接接收数据从buffer。Recvfrom(),这个函数接受到数据,和sender的地址(主机

号,端口号),当然也可以发送数据到客户端,用sendto(data,addr)

3 关闭套接字 close()

伪代码:

Ss=socket() #创建套接字

() #绑定

inf_loop: #无限循环

om()/sendto() #对话

() #关闭套接字

UDP客户端:

1 创建套接字,socket

2 进入循环,发送接收数据 sendto ,recvfrom

3 关闭套接字 close()

伪代码:

Cs=socket() #创建

Comm_loop: #循环接收发送

()/recvfrom() #对话

() #关闭

Send() sendto() recv()recvfrom()

我们发现在TCP连接中我们发生接收数据都是用的send()和recv()方法,而在UDP

中用的sendto()和recvfrom()。这两对方法实现的作用差不多,但是参数有所不同,

TCP中,send(data)和recv(buffer),因为在TCP中,传输数据之前连接已经建立,

也就是说我们知道给谁发,或者收谁的数据。而在 UDP中用,recvfrom(buffer)和sendto

(data,addr),recvfrom可以接受到sender的addr,然后发送时, 根据addr发送。因为

UDP不是面向连接的,所以我们必须知道这个数据要发给谁,它的地址什么。

四,UDP广播

1,工作原理

在UDP广播通讯模式下,一个单独的数据包拷贝发送给网络上所有主机。 当不能明确

具体的服务器,而又要求该服务时,UDP广播提供了传输不区分种类的消息的便捷方式。

在多数情况下UDP广播仅仅作为本地网络通信形式。 受限的广播地址是255.255.255.255。

该地址用于主机配置过程中IP数据报的目的地址,此时,主机可能还不知道它所在网络的

网络掩码,甚至连它的IP地址也不知道。在任何情况下,路由器都不转发目的地址为受限

广播地址的数据报,这样的数据报仅出现在本地网络中。 已知网络主机的IP地址和子网掩

码,可以算得指向主机所在子网的广播。 子网广播地址 = (主机IP) “或” (子网掩

码取反)。

2,拓扑结构


发布者:admin,转转请注明出处:http://www.yc00.com/news/1717173482a2734830.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信