python网络编程socket

本文介绍了Python中的socket模块,用于处理网络操作。socket是通信链的句柄,用于描述IP地址和端口。文章展示了简单的客户端和服务端代码示例,详细解释了socket对象的常用方法,包括地址簇、类型和协议的选择。此外,还提及了Python的socketserver模块,它是多线程的,可以同时处理多个客户端的连接和请求,简化了多客户端连接的实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

网络也是IO的一种,在Python中socket模块专门用来处理网络操作的。

socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭)。

hello world

我们来看一下最简单的socket客户端和服务端的代码,来对socket编程有一个基本的概念

服务端

#!/usr/bin/env python3
# coding:utf-8
'''
Created on: 2018年8月13日

@author: lixuesong

Email: 247****687@qq.com

Version: 1.0

Description: socket演示程序,服务端

Help:
'''
if __name__ == '__main__':
    import socket                              # 导入socket模块
    ip_port = ('127.0.0.1', 9000)              # 定义监听端口和IP地址
    sk = socket.socket()                       # 创建socket对象
    sk.bind(ip_port)                           # 绑定IP地址和端口
    sk.listen(5)                               # 开始监听
    print('server is waiting ...')
    while True:
        conn, addr = sk.accept()               # 等待接收客户端请求
        client_data = conn.recv(1024)          # 接收数据
        print(str(client_data, 'utf8'))
        conn.send(bytes('你是猪吗', 'utf8'))   # 向客户端发送消息
        conn.close()                           # 关闭连接

客户端


                
### Python使用 `socket` 模块进行网络编程 #### 基本概念 在网络编程中,`Socket` 是一种通信机制,允许程序之间通过网络交换数据。在 Python 中,`socket` 模块提供了一种方式来创建和管理这些套接字对象[^1]。 #### 创建套接字 为了建立连接并传输数据,在 Python 中可以通过调用 `socket.socket()` 函数来实例化一个新的套接字对象。此函数接受几个参数以指定协议族(如 AF_INET 表示 IPv4)、套接字类型(SOCK_STREAM 或 SOCK_DGRAM),以及其他选项[^3]。 ```python import socket # 创建TCP/IP套接字 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) ``` #### 绑定地址与监听请求 对于服务器端应用来说,通常会绑定到特定 IP 地址及端口号,并进入监听状态等待来自客户端的连接请求: ```python server_address = (&#39;localhost&#39;, 10000) print(&#39;启动服务器...&#39;) try: sock.bind(server_address) # 将套接字绑定到本地地址 except Exception as e: print(f&#39;无法绑定 {e}&#39;) sock.listen(5) # 开始监听传入连接;最大队列长度为5 ``` #### 接受新连接 当有新的客户尝试连接,服务器可以调用 accept 方法接收该连接,并返回一个代表已建立连接的新套接字以及对方的信息: ```python connection, client_address = sock.accept() with connection: print(&#39;收到连接:&#39;, client_address) while True: data = connection.recv(16) if not data: break print(&#39;收到来自{}的数据: {!r}&#39;.format(client_address, data)) connection.sendall(data.upper()) ``` 上述代码展示了如何处理简单的回显服务——即把从客户端接收到的消息转换成大写形式再发回去[^2]。 #### 客户端发送消息给服务器 而作为客户端,则需主动发起连接至目标主机上的某个开放端口,并向其发送信息或者读取响应内容: ```python messages = [ &#39;这是第一条消息&#39;, &#39;这是第二条消息&#39; ] for message in messages: try: sent = sock.sendto(message.encode(), server_address) amount_received = 0 amount_expected = len(message) while amount_received < amount_expected: data, _ = sock.recvfrom(16) amount_received += len(data) print(&#39;收到回复:&#39;, data.decode()) finally: print(&#39;关闭套接字&#39;) sock.close() ``` 这段脚本演示了怎样构建一个基本的 UDP 客户端,它能够依次发送多条短语给远程服务器,并打印出所获得的所有回应。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值