杨杭
TCP模拟QQ聊天(单线程)
2021-7-31 17:45
阅读:1990

一、服务器端代码

import struct
from socket import *
#创建套接字
s = socket(AF_INET, SOCK_STREAM)
#绑定端口
s.bind(('',8089)) #绑定的是本机,端口为8089
s.listen()
#接收客户端的连接
client_socket, client_info = s.accept()
#接收
while True:
   #服务器端接收客户端消息
   data = client_socket.recv(1024)  # 接收数据,类型为元组
   print('客户端说:',data.decode('utf-8'))
   if data.decode('utf-8') == 'bye':
       break
   msg = input('>>>>')
   client_socket.send(msg.encode('utf-8'))
   if msg == 'bye':
       break
s.close()
client_socket.close()


二、客户端代码

import struct
from socket import *

# 创建套接字
client_socket = socket(AF_INET, SOCK_STREAM)
# 绑定端口
HOST = '192.168.1.104'
client_socket.connect((HOST, 8089))

while True:
   # 客户端发送消息
   msg = input('>>>>')
   client_socket.send(msg.encode('utf-8'))
   if msg == 'bye':
       break
   # 客户端接收消息
   recv_data = client_socket.recv(1024)
   print('服务器端说:', recv_data.decode('utf-8'))
   if recv_data.decode('utf-8') == 'bye':
       break
client_socket.close()

三、测试

1、首先运行服务器端代码,控制台显示如下:

image.png2、然后运行客户端代码,控制台显示如下:

image.png3、接下来在客户端输入“你好”,则客户端控制台显示:

image.png

4、打开服务器端控制台,并输入内容“请问您想咨询哪些内容?”,则先后显示如下:

image.png

image.png

5、此时打开客户端控制台,显示如下:

image.png

6、至此,我们实现了服务器端与客户端的单线程依次聊天。

注意此时还不能在客户端或服务器端连续发送消息,否则会有如下提示:

image.png7、根据我们代码中的设置,当在客户端或服务器端输“bye”时,聊天自动结束,退出聊天室。

image.png

image.png

转载本文请联系原作者获取授权,同时请注明本文来自杨杭科学网博客。

链接地址:https://wap.sciencenet.cn/blog-346157-1297775.html?mobile=1

收藏

分享到:

下一篇
当前推荐数:0
推荐到博客首页
网友评论0 条评论
确定删除指定的回复吗?
确定删除本博文吗?