Python高阶技巧5 -- 网络编程

1. 服务端开发


socket是一个数据的搬运工,负责不同进程之间相互的数据传输。

服务端是被动的,客户端是主动的。

import socket

# 创建socket对象, 此时还未确定是服务端还是客户端
socket_server = socket.socket()

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

# 监听端口;listen方法内接收一个整数传参数,表示接受的连接数量
socket_server.listen(1)

# 等待客户端连接;accept方法返回的是二元元组(连接对象,客户端地址信息)
conn, address = socket_server.accept()
print(f"接收到了客户端的连接,客户端的信息是{address}")
# accept()方法,是阻塞的方法,等待客户端的连接,如果没有连接,就会卡在这一行不向下执行

# 完成服务端和客户端持续的交流
while True:
    # 接受客户端信息
    data: str = conn.recv(1024).decode("utf-8")
    # recv接受的参数是缓冲区大小,一般给1024即可
    # recv方法的返回值是一个字节数组也就是bytes对象,不是字符串,可以通过decode方法通过utf-8编码,将字节数组转换为字符串对象
    print(f"客户端发送来的消息是:{data}")
    
    # 发送回复消息
    # msg = input("请输入你要和客户端回复的消息:").encode("utf-8")  # encode可以将字符串编码为bytes数组
    msg = input("请输入你要和客户端回复的消息:")
    if msg == 'exit':
        break
    conn.send(msg.encode("utf-8"))

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

 

 

2. 客户端开发


import socket

socket_client = socket.socket()

socket_client.connect(("localhost", 8888))

while True:
    send_msg = input("请输入要发送的消息:")
    if send_msg == "exit":
        break
    socket_client.send(send_msg.encode("utf-8"))  # 消息要编码为字节数组
    recv_data = socket_client.recv(1024).decode("utf-8")
    print(f"服务端回复的消息为:{recv_data}")
socket_client.close()

 

posted @ 2023-08-01 10:24  Peg_Wu  阅读(1)  评论(0编辑  收藏  举报