Python 从客户端发送和接收消息

Python 从客户端发送和接收消息

Python socket 是一组用于socket编程的模块,它可以在IP网络上的进程之间进行通信。Python的socket为大多数网络编程任务提供了基础。通过导入相关模块,我们可以编写Python程序创建不同类型的网络应用,如网络爬虫、文件传输、邮件客户端和聊天应用。

“socket” 模块是Python中最重要的socket编程模块,它提供了不同类型的面向连接和无连接的socket,实现了特定的协议层,如TCP、UDP等。

TCP(传输控制协议)sockets

TCP(传输控制协议)sockets用于需要可靠传输数据的通信。它们遵循一系列特定的数据传输规则,以确保发送的消息被预期的接收者成功接收。这些类型的sockets适用于流媒体服务,如视频通话、在线游戏、文件共享等。

UDP(用户数据报协议)sockets

UDP(用户数据报协议)sockets用于不需要可靠传输数据的通信。这些sockets通过以全速发送数据包来实现快速传输数据,而不必担心接收方是否接收到它们。这样可以避免数据重传并减少网络拥塞。使用UDP sockets的应用程序包括视频流媒体、VoIP和在线游戏。

以下是启动服务器和客户端之间通信所需遵循的步骤:

导入socket模块

首先,我们必须在Python环境中导入socket模块,如下所示:

import socket

创建一个套接字

现在我们需要使用下面提到的代码,使用 socket.socket() 函数创建一个套接字。代码中第一个参数 socket.AF_INET 指定了地址族(IPv4),第二个参数 socket.SOCK_STREAM 表示这是一个TCP套接字。我们也可以使用 socket.SOCK_DGRAM 来创建一个UDP套接字。

sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

绑定套接字

在这个步骤中,我们正在指定套接字将侦听传入连接的地址和端口。例如,如果套接字绑定到本地地址(’localhost’)和端口5000,则代码如下所示。

server_address = ('localhost', 5000)
sock.bind(server_address)

监听连接

socket方法的 listen() 函数将套接字设置为监听模式,使其能够接受传入的连接,并且我们使用listen()函数为其分配参数1,指定了最大的待处理连接数。

sock.listen(1)

接受连接

accept() 函数阻塞,直到客户端连接到套接字。它返回一个表示连接和客户端地址的新套接字对象。然后我们可以在一个单独的线程或进程中处理这个连接。

while True:
   connection, client_address = sock.accept()

发送和接收数据

一旦建立了连接,我们可以使用socket对象来发送和接收数据。 recv() 函数从套接字中读取数据,而 sendall() 函数将数据发送给客户端。数据通常以字节形式传输,因此常常在字符串前加上 b 以表示 字节文字

data = connection.recv(1024)  
connection.sendall(b'Hello, client!')

关闭连接

当我们完成与客户端的通信后,可以调用套接字对象上的close()方法来关闭连接。

connection.close()

关闭服务器套接字

最后,当您不再需要服务器套接字时,您可以使用close()方法将其关闭。

sock.close()

示例

以下是完整的示例 –

import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_address = ('localhost', 5000)
sock.bind(server_address)
sock.listen(1)
while True:
    connection, client_address = sock.accept()
data = connection.recv(1024)  
connection.sendall(b'Hello, client!') 
connection.close()
sock.close()

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程