在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
云原生网关 MSE Higress,422元/月
简介: 在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。

Python Socket编程基础

1. 引入socket模块

在Python中,我们使用socket模块来进行网络通信。首先,我们需要导入这个模块。

import socket

2. 创建socket对象

使用socket.socket()函数来创建一个socket对象。这个函数接受两个参数:地址族和数据流类型。

  • 地址族:AF_INET表示IPv4地址,AF_INET6表示IPv6地址。
  • 数据流类型:SOCK_STREAM表示TCP协议(面向连接的),SOCK_DGRAM表示UDP协议(无连接的)。
# 创建一个TCP socket对象
tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

3. 绑定地址和端口

使用bind()方法将socket绑定到一个地址和端口上。对于服务器来说,这是必须的,因为服务器需要监听一个特定的地址和端口来接收客户端的连接请求。

# 绑定到本地地址和端口
server_address = ('localhost', 12345)
tcp_socket.bind(server_address)

4. 监听连接

对于服务器socket,使用listen()方法来开始监听连接。这个方法接受一个参数,表示最大连接数(通常设置为一个较大的值,如5)。

# 开始监听连接
tcp_socket.listen(5)

5. 接受连接

服务器使用accept()方法来接受客户端的连接请求。这个方法会阻塞,直到有一个客户端连接上。当连接被接受后,accept()方法返回一个包含两个元素的元组:一个新的socket对象(用于与客户端通信)和客户端的地址信息。

# 接受一个连接
client_socket, client_address = tcp_socket.accept()
print(f"Accepted connection from {client_address}")

6. 发送和接收数据

  • send()方法用于发送数据。它接受一个字节串作为参数,并返回发送的字节数。注意,发送的数据必须是字节串,而不是字符串。你可以使用str.encode()方法将字符串转换为字节串。
  • recv()方法用于接收数据。它也接受一个参数,表示最多接收的字节数。这个方法会阻塞,直到有数据到来或者连接被关闭。接收到的数据是一个字节串,你可以使用bytes.decode()方法将其转换回字符串。
# 发送数据给客户端
message = "Hello, client!".encode()
client_socket.send(message)

# 接收客户端发送的数据
data = client_socket.recv(1024)  # 最多接收1024字节
print(f"Received from client: {data.decode()}")

7. 关闭连接

使用close()方法来关闭socket连接。无论是客户端还是服务器,在完成通信后都应该关闭socket连接。

# 关闭客户端socket
client_socket.close()

# 关闭服务器socket(在服务器处理完所有连接后)
tcp_socket.close()

完整示例:TCP服务器和客户端

TCP服务器

import socket

def start_tcp_server():
    # 创建TCP socket对象
    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # 绑定地址和端口
    server_address = ('localhost', 12345)
    tcp_socket.bind(server_address)

    # 开始监听连接
    tcp_socket.listen(5)

    while True:
        # 接受连接
        client_socket, client_address = tcp_socket.accept()
        print(f"Accepted connection from {client_address}")

        try:
            # 发送数据给客户端
            message = "Hello, client!".encode()
            client_socket.send(message)

            # 接收客户端发送的数据
            data = client_socket.recv(1024)
            print(f"Received from client: {data.decode()}")
        finally:
            # 关闭客户端socket
            client_socket.close()

if __name__ == '__main__':
    start_tcp_server()

TCP客户端

```python
import socket

处理结果:

Python Socket编程基础

1. 引入socket模块

在Python中,我们使用socket模块来进行网络通信。首先,我们需要导入这个模块。
``python 使用socket.socket()`函数来创建一个socket对象。这个函数接受两个参数:地址族和数据流类型。

  • 地址族:AF_INET表示IPv4地址,AF_INET6表示IPv6地址。
    python 使用`bind()`方法将socket绑定到一个地址和端口上。对于服务器来说,这是必须的,因为服务器需要监听一个特定的地址和端口来接收客户端的连接请求。python
    对于服务器socket,使用listen()方法来开始监听连接。这个方法接受一个参数,表示最大连接数(通常设置为一个较大的值,如5)。
    python 服务器使用`accept()`方法来接受客户端的连接请求。这个方法会阻塞,直到有一个客户端连接上。当连接被接受后,`accept()`方法返回一个包含两个元素的元组:一个新的socket对象(用于与客户端通信)和客户端的地址信息。python
  • send()方法用于发送数据。它接受一个字节串作为参数,并返回发送的字节数。注意,发送的数据必须是字节串,而不是字符串。你可以使用str.encode()方法将字符串转换为字节串。
    ```python

    接收客户端发送的数据

    使用close()方法来关闭socket连接。无论是客户端还是服务器,在完成通信后都应该关闭socket连接。
    ```python

    关闭服务器socket(在服务器处理完所有连接后)

    TCP服务器

    ```python
    def start_tcpserver()

    创建TCP socket对象

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

    绑定地址和端口

    server_address = ('localhost', 12345)
    tcp_socket.bind(server_address)

    开始监听连接

    tcpsocket.listen(5)
    while True

    接受连接

    client_socket, client_address = tcp_socket.accept()
    print(f"Accepted connection from {clientaddress}")
    try

    发送数据给客户端

    message = "Hello, client!".encode()
    client_socket.send(message)

    接收客户端发送的数据

    data = clientsocket.recv(1024)
    print(f"Received from client
    {data.decode()}")
    finally_

    关闭客户端socket

    clientsocket.close()
    if name == 'main'

    start_tcp_server()
    ```python
相关文章
|
7天前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
36 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
7天前
|
机器学习/深度学习 计算机视觉 网络架构
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
92 63
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
|
7天前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
89 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
7天前
|
机器学习/深度学习 计算机视觉
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
34 10
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
|
8天前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
39 9
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
|
9天前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
25 6
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
|
11天前
|
机器学习/深度学习 计算机视觉
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
42 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
|
11天前
|
机器学习/深度学习 计算机视觉 网络架构
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
49 19
|
3月前
|
Kubernetes 网络协议 Python
Python网络编程:从Socket到Web应用
在信息时代,网络编程是软件开发的重要组成部分。Python作为多用途编程语言,提供了从Socket编程到Web应用开发的强大支持。本文将从基础的Socket编程入手,逐步深入到复杂的Web应用开发,涵盖Flask、Django等框架的应用,以及异步Web编程和微服务架构。通过本文,读者将全面了解Python在网络编程领域的应用。
67 1
|
4月前
|
消息中间件 监控 网络协议
Python中的Socket魔法:如何利用socket模块构建强大的网络通信
本文介绍了Python的`socket`模块,讲解了其基本概念、语法和使用方法。通过简单的TCP服务器和客户端示例,展示了如何创建、绑定、监听、接受连接及发送/接收数据。进一步探讨了多用户聊天室的实现,并介绍了非阻塞IO和多路复用技术以提高并发处理能力。最后,讨论了`socket`模块在现代网络编程中的应用及其与其他通信方式的关系。
463 3