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

本文涉及的产品
Serverless 应用引擎 SAE,800核*时 1600GiB*时
云原生网关 MSE Higress,422元/月
EMR Serverless StarRocks,5000CU*H 48000GB*H
简介: 在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
相关文章
|
3天前
|
分布式计算 网络协议 Python
Python网络编程:socket编程
Socket 编程是网络编程的重要部分,主要用于在不同计算机之间进行通信。Python 提供了一个非常强大的 socket 库,使得网络编程变得简单和灵活。本篇博文将详细介绍 Python 的 socket 编程,包括基础概念、核心组件、常用功能,并附上一个综合的示例及其运行结果。
|
3天前
|
JSON API 数据格式
Python网络编程:HTTP请求(requests模块)
在现代编程中,HTTP请求几乎无处不在。无论是数据抓取、API调用还是与远程服务器进行交互,HTTP请求都是不可或缺的一部分。在Python中,requests模块被广泛认为是发送HTTP请求的最简便和强大的工具之一。本文将详细介绍requests模块的功能,并通过一个综合示例展示其应用。
|
1天前
|
数据采集 存储 中间件
Python进行网络爬虫:Scrapy框架的实践
【8月更文挑战第17天】网络爬虫是自动化程序,用于从互联网收集信息。Python凭借其丰富的库和框架成为构建爬虫的首选语言。Scrapy作为一款流行的开源框架,简化了爬虫开发过程。本文介绍如何使用Python和Scrapy构建简单爬虫:首先安装Scrapy,接着创建新项目并定义爬虫,指定起始URL和解析逻辑。运行爬虫可将数据保存为JSON文件或存储到数据库。此外,Scrapy支持高级功能如中间件定制、分布式爬取、动态页面渲染等。在实践中需遵循最佳规范,如尊重robots.txt协议、合理设置爬取速度等。通过本文,读者将掌握Scrapy基础并了解如何高效地进行网络数据采集。
20 6
|
1天前
|
Python
Python模块的创建方法?
【8月更文挑战第18天】Python模块的创建方法?
4 2
|
1天前
|
Shell Python 容器
Python模块
【8月更文挑战第18天】Python模块
5 2
|
1天前
|
Shell Python 容器
Python模块是其代码组织和重用的基本方式。
【8月更文挑战第18天】Python模块是其代码组织和重用的基本方式。
6 1
|
2天前
|
运维 网络架构 Python
利用Python查询H3C网络设备示例,运维用了它,都称赞!
利用Python查询H3C网络设备示例,运维用了它,都称赞!
|
3月前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
36 0
Python模块与包(八)
|
3月前
|
Python
python中导入模块/包的几种方式
python中导入模块/包的几种方式
41 0
|
6天前
|
Python
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
手撕Python!模块、包、库,傻傻分不清?一分钟带你弄明白!
18 1