当前位置: 首页 > news >正文

python之socket编程

Socket编程是计算机网络编程的基础,它允许两台计算机(或同一个计算机的不同进程)之间进行通信。Python 提供了 socket 模块,可以很方便地进行 Socket 编程。下面是一些基本的 Socket 编程示例,包括 TCP 和 UDP。

TCP Socket 编程

TCP(传输控制协议)是一种面向连接的、可靠的、基于字节流的传输层通信协议。

服务器端
import socket

# 创建一个 socket 对象
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

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

# 开始监听
server_socket.listen(5)
print('Server listening on', server_address)

while True:
    # 等待连接
    print('Waiting for a connection...')
    connection, client_address = server_socket.accept()
    try:
        print('Connection from', client_address)

        # 接收数据
        while True:
            data = connection.recv(1024)
            if data:
                print('Received', repr(data))
                # 发送数据
                connection.sendall(data)
            else:
                break
    finally:
        # 清理连接
        connection.close()
客户端
import socket

# 创建一个 socket 对象
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# 连接到服务器
server_address = ('localhost', 65432)
client_socket.connect(server_address)

try:
    # 发送数据
    message = 'This is the message. It will be echoed back.'
    print('Sending', repr(message))
    client_socket.sendall(message)

    # 接收数据
    amount_received = 0
    amount_expected = len(message)

    while amount_received < amount_expected:
        data = client_socket.recv(1024)
        amount_received += len(data)
        print('Received', repr(data))

finally:
    # 清理连接
    client_socket.close()

UDP Socket 编程

UDP(用户数据报协议)是一个简单的面向数据报的传输层协议。它不保证数据包的顺序、可靠性或完整性。

服务器端
import socket

# 创建一个 socket 对象
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

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

print('Starting UDP server')

while True:
    # 接收数据
    print('Waiting to receive message')
    data, address = sock.recvfrom(4096)  # 缓冲区大小是 4096 字节
    print('Received {} bytes from {}'.format(len(data), address))
    print('Data: {}'.format(data))

    if data:
        sent = sock.sendto(data, address)  # 将接收到的数据发送回去
        print('Sent {} bytes back to {}'.format(sent, address))
客户端
import socket
import time

# 创建一个 socket 对象
MESSAGE = 'This is the message.'
sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 连接到服务器
server_address = ('localhost', 10000)

try:
    # 发送数据
    print('Sending: {}'.format(MESSAGE))
    sent = sock.sendto(MESSAGE.encode(), server_address)

    # 接收响应
    time.sleep(1)  # 等待一秒以确保服务器有时间处理请求
    data, server = sock.recvfrom(4096)
    print('Received: {}'.format(data.decode()))

finally:
    # 清理连接
    print('Closing socket')
    sock.close()

注意事项

  1. 异常处理:在实际应用中,应添加更多的异常处理,以确保程序的健壮性。
  2. 并发:对于多个客户端连接,可以使用多线程或异步编程来处理。
  3. 资源管理:确保在程序结束时正确关闭所有的 socket 连接。

以上是一些基础的 Python Socket 编程示例,希望对你有所帮助。

相关文章:

  • 2020~2021学年度武汉市部分学校高三起点质量检测【数学】
  • 语义向量模型全解:从基础到现在的deepseek中的语义向量主流模型
  • C语言之const
  • Springboot 高频面试题
  • 常见千兆光电收发器型号(PON无源光收发光功率范围)
  • Affinity Photo for Mac v2.6.0专业级修图软件 支持M、Intel芯片
  • 【雅思博客06】Daily Life
  • 【Qt】数据库编程(SQLite API)
  • nasm - BasicWindowExt_32
  • 当电脑上有几个python版本Vscode选择特定版本python
  • C++ 标准库——函数对象和函数适配器
  • linux文件管理命令ln
  • 算法菜鸡备战3月2日传智杯省赛----0221
  • 大数据组件(四)快速入门实时数据湖存储系统Apache Paimon(3)
  • 《代码随想录第三十九天》——背包问题二维、背包问题一维、分割等和子集
  • 【进程与线程】Linux 线程、同步以及互斥
  • 学习整理安装php的uuid扩展以及uuid调用方法
  • vue2.x中父组件通过props向子组件传递数据详细解读
  • logstash中的input插件(http插件,graphite插件)
  • python杂学
  • 茶网站设计素材下载/最近时政热点新闻
  • 深圳银行网站建设/淘宝店铺买卖交易平台
  • 继续访问这个网站/一链一网一平台
  • 百度手机导航官方新版/seo专家是什么意思
  • 厦门做新零售直销网站公司app/广州市新闻最新消息
  • 余姚专业网站建设公司/常州seo关键词排名