青未了分享 http://blog.sciencenet.cn/u/yanghang

博文

TCP模拟QQ聊天(单线程)

已有 1988 次阅读 2021-7-31 17:45 |个人分类:Python|系统分类:科研笔记

一、服务器端代码

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://blog.sciencenet.cn/blog-346157-1297775.html

上一篇:TCP服务器接收数据
收藏 IP: 210.72.27.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-4-25 17:47

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部