Python---Socket 网络通信

Socket :进程之间通信的工具,进程之间想要进行网络通信需要Socket,两个进程之间通过socket进行相互通讯,就必须有服务端和客服端。

Socket服务端编程

# 1.创建socket对象
import socket

socket_server = socket.socket()

# 2. 绑定socket_server到指定IP和地址
socket_server.bind(("localhost", 8888))

# 3.服务器开始监听端口   listen方法内接收一个int整数,表示允许的链接数量,超出的会等待,可以不填,不填会自动设置一个合理的值
socket_server.listen(1)

# 4.接收客户端链接,获得链接对象
# accept方法是阻塞方法,等待客户端的链接,如果没有链接,就卡在这一行不想下执行了。accept返回的是二元元组(链接对象,客户端的地址信息)

# 等待客户端链接
# result:tuple = socket_server.accept()
# conn =result[0]   # 客户端和服务端的链接对象
# address = result[1]  # 客户端的地址信息

# 可以通过  变量1,变量2 = socket_server.accept()  的形式,直接接收二元元组内的两个元素
conn, address = socket_server.accept()  # 简写
print(f"接收到了客户端的的链接,客户端的信息是:{address}")


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

    # 6.通过conn,调用send方法可以回复消息
    msg = input("请输入你要和客户端回复的消息")
    if msg == 'exit':
        break
    conn.send(msg.encode("UTF-8"))  # encode方法可以将字符串编码转为字节数组对象

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

Socket客户端编程

# Socket客户端编程
# 1.创建socket对象
import socket
socket_client = socket.socket()

# 2. 连接到服务端
socket_client.connect(("localhost",8888))

while True:
    # 3.发送消息
    msg=input("请输入你要和服务端发送的消息")
    if msg == 'exit':
        break
    socket_client.send("你好呀".encode("UTF-8"))

    # 4. 接收返回消息
    rece_data = socket_client.recv(1024)
    print(f"服务端回复的消息是:{rece_data.decode('UTF-8')}")

# 5.关闭连接
socket_client.close()

你可能感兴趣的:(服务器,网络,python)