python网络通信模块_Python 网络编程(使用socket模块)

本文介绍了Python网络编程的基础知识,通过创建TCP服务端和客户端,展示了如何进行网络通信。服务端监听指定端口,接收客户端连接并回送数据,而客户端连接服务端,发送数据并接收回应。实验过程帮助读者理解TCP连接的工作原理和Pythonsocket模块的使用。
摘要由CSDN通过智能技术生成

network-programe-with-socket-in-python.jpg

本节将介绍网络编程的一些基础知识后,调用Python socket模块分别创建一个服务端,一个客户端,使用户可以在右侧的实验环境中,在线观察到它们之间的通信过程是怎么样的,以及是如何通过代码实现的。

什么是Socket

Socket 在英文中的含义为“(连接两个物品的)凹槽”,通常我们把它理解为“插座”的意思。但在计算机科学中,Socket又称"套接字",是指一个连接的两个端点,这里的连接可以是同一机器上的,像unix socket,也可以是不同机器上的,像network socket。我们可以简单可以把socket看作是一种特殊的文件,一些socket函数对这个特殊文件进行的操作(读/写IO、打开、关闭),从而实现不同机器的网络连接实现。

网络连接又分 TCP 连接和 UDP 连接。TCP 连接是可靠的网络连接,通信双方均可以以流的方式发送数据,且发送方要保证接收方接收到数据。UDP 连接是无状态通信,无需真正建立连接,且发送方不保证接收方是否接收到数据。我们所接触到的网络连接通常都是 TCP 连接。

应用程序通常通过"套接字"向网络发出请求或者应答网络请求,使主机间或者一台计算机上的进程间可以通讯。在创建 TCP 连接时,主动发起连接的叫做客户端,被动响应连接的叫服务器。

实验

实验设计

TCP服务端程序流程

创建套接字,绑定套接字到本地IP与端口

开始监听连接

进入循环,不断接受客户端的连接请求

然后接收传来的数据,并发送给对方数据

传输完毕后,关闭套接字

TCP客户端程序流程

创建套接字,连接远端地址

连接后发送数据和接收数据

传输完毕后,关闭套接字

创建客户端脚本文件

cat > client.py << EOF

import socket

HOST = '127.0.0.1'

PORT = 30068

client = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)

client.connect((HOST, PORT))

for data in [b'keinYe', b'Steven', b'Micheel']:

client.send(data)

print(client.recv(30068).decode('utf-8'))

client.close()

EOF

客户端工作流程:

客户端需要连接到服务器,首先需要知道该服务器的 IP 地址和端口号,我们将要编写的服务端程序的端口号为30068,因此这里设置为30068。客户端程序通过 connect 函数连接到的服务器,连接到服务器后通过 send 函数来发送数据,通过 recv 函数来接收数据。

创建服务端脚本文件

cat > server.py << EOF

import socket

import time

HOST = '127.0.0.1'

PORT = 30068

server = socket.socket(family=socket.AF_INET, type=socket.SOCK_STREAM)# 用来建立 socket 实例。

server.bind((HOST, PORT))#用来绑定 IP 和端口。

server.listen(1)#用来监听当前绑定 IP 和端口的连接时间。

conn, addr = server.accept() #用来获取客户端地址和当前连接的 socket。

print(addr)

with conn:

print('Connected by %s:%s' % addr)

while True:

time.sleep(1)#linsten(1) 表示同一时刻只接受一个客户端与连接到服务器,可修改该参数以接受多个客户端连接

data = conn.recv(1024)#用来从客户端接收收据

if not data:

break

conn.send(("Hello, %s" % data.decode('utf-8')).encode('utf-8'))#用来向客户端发送数据和

print('Disconnected %s:%s' % addr)

EOF

该服务端脚本文件绑定了在本机30068端口的服务端,用来接收客户端的连接,并将客户端发送过来的数据再回送回给客户端。每个客户端连接到该服务器是开启一个单独线程来处理通信事件。

客户端与服务器建立通信

将客户端和服务端连接并通信是检验代码是否正常工作的最好方法。单是需要注意的是在运行客户端之前要先将服务端运行起来。

我们先在右侧实验ssh区,执行以下命令

python3 server.py

然后点击实验区顶部的+号,选中open ssh,新建一个ssh连接,执行以下命令

python3 client.py

您需要在两个ssh窗口之间切换以观察客户端与服务器之间的通信过程。

您也可以手动修改代码,以观察代码的变化对通信过程的影响。

总结

使用Python socket模块进行网络编程非常简单,客户端指定服务端IP和端口后,连接即可。服务端监听指定端口,对每一个新的连接,创建一个线程或进程来处理。通常服务器程序会无限运行下去。通过本节的实践,相信用户用户可以通过右侧的在线实验环境,对python网络编程有了初步了掌握。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值