python套接字(一):socket的使用


前言

最近研究了一下python的socket的使用,特此记录下来,方便以后参考。

一、什么是套接字?

套接字(Socket),就是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。它们使在两个不同程序或设备之间的信息传输成为可能。

二、python中套接字的常用方法

方法名描述
socket.socket()用于创建套接字(服务器和客户端都需要创建套接字
socket.accept()用于接受连接。它返回一对值(conn,address),其中conn是用于发送或接收数据的新套接字对象,而address连接另一端存在的套接字的地址
socket.bind()用于绑定到指定为参数的地址(用于服务器端)
socket.close()用于将套接字标记为已关闭
socket.connect()用于连接到指定为参数的远程地址
socket.listen()使服务器能够接受连接(用于服务器端)

三、使用

目标:创建一个简单的套接字应用,客户端发送一条数据个服务器端,服务器端收到信息后,返回一条数据给客户端。

1、服务器端代码

socket_server.py

"""
展示Socket服务器开发
"""
import socket

# 创建Socket对象
socket_server = socket.socket()

# 绑定ip地址和端口
socket_server.bind(("localhost", 8888))

# 监听端口,参数表示接受的链接数量
socket_server.listen(2)

# 等待客户端信息,accept()是阻塞方法,等待客户端链接;没有链接会一直等待
conn, address = socket_server.accept()
print(f"接收到了客户端的链接,客户端的信息是:{address}")

while True:
    # 接受客户端信息,要使用客户端和服务端本次的链接对象
    # recv接受的参数是缓冲区大小,一般为1024
    # recv方法返回的是一个字节数组也就是byte对象,不是字符串,可以通过decode方法使用UTF-8编码,将字节数组转换为字符串对象
    data = conn.recv(1024).decode("UTF-8")
    print(f"客户端发来的消息是:{data}")

    # 发送回复消息
    msg = input("请输入你要和客户端回复的消息:").encode("UTF-8")   # encode可以将字符串编码为字节数组
    conn.send(msg)

# 关闭链接
conn.close()
socket_server.close()

2、客户端代码

socket_client.py

"""
演示Socket客户端开发
"""
import socket

# 创建socket对象
socket_client = socket.socket()

# 连接服务器
socket_client.connect(("localhost", 8888))

while True:
    # 发送消息
    msg = input("请输入你要发送的消息:")
    if msg == "exit":
        break
    socket_client.send(msg.encode("UTF-8"))
    # 接收返回消息
    recv_data = socket_client.recv(1024).decode("UTF-8")
    print(f"服务端回复的消息是:{recv_data}")

# 关闭链接
socket_client.close()

然后分别运行这两个代码(先运行服务器端)检验一下:
客户端:
在这里插入图片描述
服务器端:
在这里插入图片描述
可以看到,确实能够通信。
下一章:python套接字(二):实现一个服务器和多客户端连接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值