Python Scoket套件使用,客户端和服务器端使用示例

本文介绍了Python的socket模块,用于网络通信的基本功能。讲解了创建套接字、绑定地址、监听连接、接受客户端、发送和接收数据的流程,并给出了服务器端和客户端的示例代码。

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


前言

今天是周一,有点疲惫

0、Scoket模块的一些常用函数以及使用流程:

0-1、Scoket模块的一些常用函数

Python 的 socket 模块提供了与网络编程相关的基本功能。使用 socket 模块,你可以轻松地创建和操作网络套接字(sockets)以进行网络通信。下面是 socket 模块的一些常用函数和方法:

  • socket.socket():创建一个套接字对象
  • socket.bind(address):绑定套接字到一个特定的地址和端口
  • socket.listen(backlog):开始监听连接,backlog 指定等待连接的最大数量
  • socket.accept():接受客户端连接,并返回一个新的套接字对象以便在服务器和客户端之间进行通信
  • socket.connect(address):连接到指定地址和端口的服务器
  • socket.recv(bufsize):从套接字接收数据,指定缓冲区大小
  • socket.send(bytes):发送数据到套接字
  • socket.close():关闭套接字连接

使用 socket 模块,你可以创建 TCP 或 UDP 的套接字,根据需要配置套接字选项,使用不同的传输协议和端口号等等。使用 socket 模块可以构建各种网络应用程序,例如基于套接字的 Web 服务器、聊天室、文件传输程序等。

0-2、使用流程

当你需要编写一个网络应用程序时,你可能需要使用 socket 模块来完成以下操作

  • 创建套接字对象:使用 socket.socket() 函数创建一个套接字对象。在创建套接字时,你需要指定使用哪种传输协议(如 TCP 或 UDP)以及套接字的类型(如面向流的套接字或面向消息的套接字)。
  • 绑定套接字到一个地址和端口:使用 socket.bind() 函数将套接字绑定到一个特定的地址和端口。当你需要创建一个服务器应用程序时,你需要在服务器上的某个地址和端口上侦听客户端连接请求。
  • 开始监听连接:使用 socket.listen() 函数开始监听客户端连接请求。在此期间,服务器将等待客户端连接请求并在客户端连接请求到达时接受连接请求并返回一个新的套接字对象。
  • 接受客户端连接并返回新的套接字对象:使用 socket.accept() 函数接受客户端连接,并返回一个新的套接字对象以便在服务器和客户端之间进行通信。在此过程中,服务器将阻塞并等待客户端连接请求到达。
  • 发送和接收数据:使用 socket.send() 和 socket.recv() 函数发送和接收数据。发送数据时,你需要将数据编码为字节串(bytes)类型。接收数据时,你需要指定要接收的数据大小并将其解码为相应的格式。
  • 关闭连接:使用 socket.close() 函数关闭套接字连接。

除此之外,还可以使用 socket 模块提供的其他函数和方法来控制套接字选项,设置超时时间等等。在使用 socket 模块时,需要注意处理网络异常和错误,例如连接中断、连接超时、网络故障等等

下边为使用Socket的示例

一、服务器端

import socket

IP = ip地址
PORT = 端口号
BUFLEN = 1024

# 初始化Scoket,获取tcp/ip套接字。
listenSocket = socket.socket(socket.AF_INET,socket.SOCK_STREAM)

# 与端口进行绑定
# IP = socket.gethostname()
listenSocket.bind((IP,PORT))
# 对端口进行监听
# 5表示操作系统可以挂起的最大连接数量。
listenSocket.listen(5)

print('服务端启动成功','在',PORT,'端等待客户连接')
# 调用accept进行阻塞,之后等待客户端连接,客户端发送数据请求,服务器端接受并且处理请求。
dataSocket,addr = listenSocket.accept()
print('接收一个客户端连接:',addr)

while True:
    # 设置可以接受的最大数据值。
    recved = dataSocket.recv(BUFLEN)

    # 如果超出最大范围,则break中断。
    if not recved:
        break
    info = recved.decode()
    print('收到客户端消息',info)
    dataSocket.send(info.encode())

# 关闭阻塞,关闭套接字。
dataSocket.close()
listenSocket.close()

二、客户端

import socket

Port = 端口号
IP = ip地址

phone = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# IP = socket.gethostname()

# 主动初始化TCP服务连接
phone.connect((IP, Port))
# 拨通电话


# 发消息
# 发送TCP数据,将string中的数据发送到连接的套接字。
phone.send('hello'.encode('utf-8'))


back_msg = phone.recv(1024)
print(back_msg)

phone.close()


总结

想念海边,想去过夏天了!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ㄣ知冷煖★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值