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

本文涉及的产品
可观测监控 Prometheus 版,每月50GB免费额度
可观测可视化 Grafana 版,10个用户账号 1个月
应用实时监控服务-用户体验监控,每月100OCU免费额度
简介: 在Python中,我们使用`socket`模块来进行网络通信。首先,我们需要导入这个模块。

Python Socket编程基础

1. 引入socket模块

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

import socket
AI 代码解读

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)
AI 代码解读

3. 绑定地址和端口

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

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

4. 监听连接

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

# 开始监听连接
tcp_socket.listen(5)
AI 代码解读

5. 接受连接

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

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

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()}")
AI 代码解读

7. 关闭连接

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

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

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

完整示例: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()
AI 代码解读

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
目录
打赏
0
0
0
0
88
分享
相关文章
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
45 3
RT-DETR改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
108 63
RT-DETR改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
105 62
RT-DETR改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
51 10
RT-DETR改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 优化颈部网络
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
54 9
YOLOv11改进策略【Neck】| ASF-YOLO 注意力尺度序列融合模块改进颈部网络,提高小目标检测精度
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
32 6
YOLOv11改进策略【Neck】| ECCV-2024 RCM 矩形自校准模块 二次创新C3k2 改进颈部网络
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
54 9
YOLOv11改进策略【模型轻量化】| 替换骨干网络为 MobileViTv1高效的信息编码与融合模块,获取局部和全局信息
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
YOLOv11改进策略【模型轻量化】| 替换骨干网络 CVPR-2024 StarNet,超级精简高效的轻量化模块
69 19
|
2月前
|
Python Internet 模块
Python Internet 模块。
136 74
马特赛特旋转算法:Python的随机模块背后的力量
马特赛特旋转算法是Python `random`模块的核心,由松本真和西村拓士于1997年提出。它基于线性反馈移位寄存器,具有超长周期和高维均匀性,适用于模拟、密码学等领域。Python中通过设置种子值初始化状态数组,经状态更新和输出提取生成随机数,代码简单高效。
142 63

云原生

+关注
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等