基于C/S架构的即时通信
server端:
import socket
sk = socket.socket()
sk.bind(('127.0.0.1', 9001)) # 申请操作系统的资源,绑定ip和端口
sk.listen(128) # 被动监听客户端发送过来的消息,数字表示同一时刻能够连接客户端的程度
while True: # 为了和多个客户端进行握手
conn, addr = sk.accept() # 阻塞,当出现客户端的请求完成连接,并获取数据和客户端的信息
while True:
send_msg = input('>>>')
conn.send(send_msg.encode('utf-8'))
if send_msg.upper() == 'Q': # 如果发送的消息为q则退出循环,关闭连接
break
msg = conn.recv(1024).decode('utf-8')
if msg.upper() == 'Q': # 如果发送的消息为q则退出循环,关闭连接
break
print(msg)
conn.close() # 挥手 断开与客户端的连接
sk.close() # 关闭套接字,归还申请的操作系统的资源
client端:
import socket
sk = socket.socket()
sk.connect(('127.0.0.1', 9001)) # 连接到指定服务器
while True:
msg = sk.recv(1024).decode('utf-8') # 接受服务端发来的消息,数字代表接受的最大字节的长度,因为收发消息都需要以字节的形式,所以需要的发送的消息进行编码
if msg.upper() == 'Q': # 收到的消息为q则退出程序
break
print(msg)
send_msg = input('>>>')
sk.send(send_msg.encode('utf-8')) # 发送的消息为q则退出程序
if send_msg.upper() == 'Q':
break
sk.close() # 关闭套接字