Python中如何使用socket编程实现网络通信

13,531次阅读
没有评论

共计 1934 个字符,预计需要花费 5 分钟才能阅读完成。

请叫我小可爱
2023-06-28 14:09:49
浏览数 (1670)

网络通信是现代软件开发中不可或缺的一部分,它可以让不同的设备之间通过网络进行数据交换。Python 作为一门功能强大、简洁优雅的编程语言,提供了标准库 socket,用于实现底层的网络通信功能。本文将介绍 Python 中如何使用 socket 编程,以及给出一个简单的客户端和服务器之间通信的代码案例。

socket 是一种抽象的数据结构,它表示一个网络连接的端点。每个 socket 都有一个地址和一个端口号,用于标识网络中的一个唯一的位置。socket 可以分为两种类型:流式 socket(stream socket)和数据报式 socket(datagram socket)。流式 socket 基于 TCP 协议,提供了可靠、有序、双向的字节流传输服务,适用于需要稳定传输的场景,如文件传输、远程登录等。数据报式 socket 基于 UDP 协议,提供了无连接、不可靠、无序的数据包传输服务,适用于需要快速传输的场景,如视频通话、在线游戏等。

Python 中使用 socket 编程的基本步骤如下:

  1. 导入 socket 模块:import socket
  2. 创建 socket 对象:s = socket.socket(family, type),其中 family 指定地址族,如 socket.AF_INET 表示 IPv4 地址,type 指定 socket 类型,如 socket.SOCK_STREAM 表示流式 socket。
  3. 绑定地址和端口:s.bind((host, port)),其中 host 是一个字符串,表示主机名或 IP 地址,port 是一个整数,表示端口号。
  4. 监听连接(仅服务器端):s.listen(backlog),其中 backlog 是一个整数,表示最大等待连接数。
  5. 接受连接(仅服务器端):conn, addr = s.accept(),其中 conn 是一个新的 socket 对象,用于与客户端通信,addr 是一个元组,表示客户端的地址和端口。
  6. 发送数据:s.send(data)s.sendall(data),其中 data 是一个字节对象,表示要发送的数据。send 方法可能只发送部分数据,sendall 方法保证发送所有数据。
  7. 接收数据:data = s.recv(bufsize),其中 bufsize 是一个整数,表示接收缓冲区的大小,data 是一个字节对象,表示接收到的数据。
  8. 关闭 socket:s.close()

下面给出一个简单的客户端和服务器之间通信的代码案例:

服务器端:

import socket


# 创建流式 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定本机地址和端口 8080
s.bind(('localhost', 8080))
# 监听最多 10 个连接
s.listen(10)
print('服务器启动成功,等待客户端连接...')


# 循环接受客户端连接
while True:
# 接受一个客户端连接
conn, addr = s.accept()
print('收到来自 {} 的连接'.format(addr))
# 循环接收和发送数据
while True:
# 接收客户端发送的数据
data = conn.recv(1024)
# 如果没有数据,则跳出循环
if not data:
break
# 打印接收到的数据
print('收到来自 {} 的消息:{}'.format(addr, data.decode()))
# 将接收到的数据原样返回给客户端
conn.sendall(data)
# 关闭连接
conn.close()
print('与 {} 断开连接'.format(addr))


# 关闭 socket
s.close()

客户端:

import socket


# 创建流式 socket 对象
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接服务器地址和端口 8080
s.connect(('localhost', 8080))
print('成功连接服务器')


# 循环发送和接收数据
while True:
# 输入要发送的数据
data = input('请输入要发送的消息:')
# 如果输入空字符串,则跳出循环
if not data:
break
# 将数据编码为字节对象
data = data.encode()
# 发送数据给服务器
s.sendall(data)
# 接收服务器返回的数据
data = s.recv(1024)
# 打印接收到的数据
print('收到来自服务器的消息:{}'.format(data.decode()))


# 关闭 socket
s.close()

更多 python 课程推荐python 相关课程

原文地址: Python 中如何使用 socket 编程实现网络通信

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-09-20发表,共计1934字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)