10月23日简易服务器与客户端通信

发布时间 2023-10-23 14:35:06作者: songjunwan

简易服务器与客户端通信

此代码可以用于两者互相通信(就是互相发信息)

服务器代码

#导入一个socket模块来建立一个简单的通信服务器
import socket

#socket.AF_INET表示使用 IPv4 地址族,这是 Internet 上常用的地址族。socket.SOCK_STREAM 表示创建一个基于 TCP 协议的 Socket 对象
soc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

#相当于绑定ip地址和端口号  将两者以元组的形式写进去
soc.bind(('172.17.8.49', 8080))  #如果写本机ip,外部可以访问
# soc.bind(('127.0.0.1', 8080))   #如果写127.0.0.1,只能自己访问

#开启服务器
soc.listen(5)#这个5是半连接池的大小

#等待客户端发送请求
conn, addr = soc.accept()#conn表示新的socket对象,addr表示客户端的地址信息

print('有个客户端连接上了', addr)
while True:
    # 接收客户端的数据
    data = conn.recv(1024)  # recv就是接收的作用,里面1024指能接收1024个字节,data指的是客户端发过来的数据
    # 解码收到的字节串以还原文本
    huanyuan = data.decode('utf-8')

    print(f'收到客户端的信息:{huanyuan}')  # 这里是给这个客户端发来的请求输出出来

    # 将文本编码为字节串(UTF-8编码)
    shuju = input('回复:')
    shuju = shuju.encode('utf-8')

    # conn.send 是发数据,数据必须是bytes格式也就是b'内容'
    conn.send(shuju)

#关闭与客户端的连接
conn.close()
#关闭服务器的主要通信端口
soc.close()

然后是客户端的代码


#导入socket方法
import socket

#创建一个socket对象
soc = socket.socket()

#连接服务器(以元组的形式传进去)
soc.connect(('172.17.8.49', 8080))

while True:
    # 将文本编码为字节串(UTF-8编码)
    shuju = input('输入:')

    # 这里给服务器发送数据
    soc.send(shuju.encode('utf-8'))
    # 接收来自服务器的数据,同时把数据赋值给data这个变量
    data = soc.recv(1024)

    # 解码收到的字节串以还原文本
    huanyuan = data.decode('utf-8')

    print(f'收到服务器的回复:{huanyuan}')  # 这里是把这个服务器发来的请求输出出来


#关闭连接与服务器的连接,释放资源
soc.close()