Python Socket网络编程:TCP/IP服务器与客户端通信实战

叶初
叶初
发布时间:2026-10-13| 3人浏览过
原创

本文详解Python中socket模块的网络编程应用,涵盖TCP/IP套接字的创建方法。通过具体代码示例,演示如何构建TCP服务器与客户端,实现数据收发与连接管理,帮助初学者掌握基础网络通信流程。

Python Socket网络编程

作为Python初学者,此前购买了《Python编程:从入门到实践》与《Python核心编程(第3版)》两本书籍。前者侧重基础语法与基本用法,后者内容更为深入,阅读后仍感理解不够透彻。近期接触到网络编程章节,虽仍有诸多疑惑,但相信通过持续探索与资料查阅,终能彻底掌握。

本节主要涉及socket模块,该模块提供了socket()函数用于创建套接字对象。套接字对象内置了一系列方法,可用于实现基于套接字的网络通信。

socket()模块函数

创建套接字需调用socket.socket()函数,其通用语法如下

socket(socket_family, socket_type, protocol=0)

其中,socket_family参数通常为AF_UNIX或AF_INET;socket_type参数为SOCK_STREAM或SOCK_DGRAM;protocol参数通常省略,默认值为0。

因此,创建TCP/IP套接字可采用如下调用方式。

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

同理,创建UDP/IP套接字可使用以下方法调用。

udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

创建TCP服务器

TCP服务器的创建流程大致如下,此处仅为逻辑示意,并非完整代码。

ss = socket()          #创建服务器套接字
    ss.bind()              #套接字与地址绑定
    ss.listen()             #监听连接
    inf_loop:             #服务器无限循环
        cs = ss.accepr()   #接受客户端连接
        comm_loop:      #通信循环
            cs.recv()/cs.send()   #对话(接收/发送)
        cs.close()        #关闭客户端套接字
    ss.close()            #关闭服务器套接字(可选)

实际创建TCP服务器的流程与上述逻辑基本一致,具体实现如下代码所示:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *      #将 socket 属性引入到命名空间

HOST = ''          #这是对 bind()方法的标识表示可以使用任何可用的地址
PORT = 21571      #端口号
BUFSIZ = 1024     #缓冲区大小,1kb
ADDR = (HOST,PORT)   #地址????

tcpSerSocket = socket(AF_INET,SOCK_STREAM)    #创建 tcp 套接字
tcpSerSocket.bind(ADDR)           #将地址绑定到套接字上
tcpSerSocket.listen(5)            #设置并启动套接字监听

while True:        #无限循环,等待客户端连接
  print('waiting for connection...')   
  tcpCliSocket,addr = tcpSerSocket.accept()    #被动接受客户端连接     
  print('...connected from:',addr)

  while True:      #对话循环,等待客户端发送消息
    data = tcpCliSocket.recv(BUFSIZ)   #接收客户端消息
    if not data:     #如果消息是空白,跳出对话循环,关闭当前连接
      break
    tcpCliSocket.send(data)   #如果收到消息,将消息原封不动返回客户端

  tcpCliSocket.close()
tcpSerSocket.close()

创建TCP客户端

与前述类似,此处先展示一个简单的非代码流程。

cs = socket()    #创建客户端套接字
    cs.connect()     #尝试连接服务器
    comm_loop:     #通信循环
        cs.send()/cs.recv()  #对话(发送/接收)
    cs.close()       #关闭客户端套接字

实际客户端的创建过程即是对上述步骤的具体实现。

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from socket import *

HOST = 'localhost'    #服务器的主机名
PORT = 21571     #端口号
BUFSIZ = 1024     #缓冲区
ADDR = (HOST,PORT)   #地址

tcpCliSocket = socket(AF_INET,SOCK_STREAM)  #创建客户端套接字
tcpCliSocket.connect(ADDR)     #连接服务器

while True:        #通信循环
  data = input('> ')    #客户端输入信息
  if not data:   #如果输入信息为空,则跳出循环,关闭通信
    break

  data = str.encode(data)      
  tcpCliSocket.send(data)   #发送客户端信息
  data = tcpCliSocket.recv(BUFSIZ)   #接受服务器返回信息
  if not data:    #如果服务器未返回信息,关闭通信循环
    break
  print('get:',data.decode('utf-8'))

tcpCliSocket.close()

目前仅实现了最基础的通信,且对主机名、端口号等概念尚不熟练,当前测试仅限于同一台电脑且端口号一致的情况。若需在不同电脑间通信,具体操作尚不明确,本人仍在摸索中。

感谢阅读,希望本文能对各位有所帮助,感谢支持!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。