Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例


Posted in Python onAugust 31, 2017

本文实例讲述了Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能。分享给大家供大家参考,具体如下:

【吐槽】

网上的代码害死人,看着都写的言之凿凿,可运行就是有问题。
有些爱好代码、喜欢收藏代码的朋友,看到别人的代码就粘贴复制过来。可是起码你也试试运行看啊大哥

【正文】

昨日修改运行了UDP协议的C/S聊天程序,可是TCP协议的怎么都不行。各种试,各种坑。

做了下面几个修改后,终于可以了:

1、对发送、接收的信息,分别进行编码和解码
2、客户端的第10行bind改为connect这真是个大坑!!

(本文基于windows 7 + python 3.4)

完整代码如下(人头担保,本人亲测正常!):

服务器端:

# tcp_server.py
'''服务器'''
from socket import *
from time import ctime
HOST = '' #主机地址
PORT = 23345 #端口号
BUFSIZ = 2048 #缓存区大小,单位是字节,这里设定了2K的缓冲区
ADDR = (HOST, PORT) #链接地址
tcpSerSock = socket(AF_INET, SOCK_STREAM) #创建一个TCP套接字
tcpSerSock.bind(ADDR) #绑定地址
tcpSerSock.listen(5) #最大连接数为5
while True: #无限循环
  print('尝试连接客户端。。。')
  tcpCliSock, addr = tcpSerSock.accept() #等待接受连接
  print('链接成功,客户端地址为:', addr)
  while True:
    data = tcpCliSock.recv(BUFSIZ) #接收数据,BUFSIZ是缓存区大小
    if not data: break #如果data为空,则跳出循环
    print(data.decode())
    msg = '{} 服务器已接收 [自动回复]'.format(ctime())
    tcpCliSock.send(msg.encode())
  tcpCliSock.close() #关闭连接
tcpSerSock.close() #关闭服务器

客户端:

# tcp_client.py
'''客户端'''
from socket import *
from time import ctime
HOST = 'localhost' #主机地址
PORT = 23345 #端口号
BUFSIZ = 2048 #缓存区大小,单位是字节,这里设定了2K的缓冲区
ADDR = (HOST, PORT) #链接地址
tcpCliSock = socket(AF_INET, SOCK_STREAM) #创建一个TCP套接字
#tcpCliSock.bind(ADDR) #绑定地址
tcpCliSock.connect(ADDR) #绑定地址
while True:
  msg = input('请输入:') #输入数据
  if not msg: break #如果 msg 为空,则跳出循环
  tcpCliSock.send(msg.encode())
  data = tcpCliSock.recv(BUFSIZ) #接收数据,BUFSIZ是缓存区大小
  if not data: break #如果data为空,则跳出循环
  print(data.decode())

【运行截图】

实验方法:先运行服务器端,然后运行客户端

Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例

然后就可以在客户端自由的与服务器端聊天了:

Python+Socket实现基于TCP协议的客户与服务端中文自动回复聊天功能示例

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
python生成日历实例解析
Aug 21 Python
Python守护进程(daemon)代码实例
Mar 06 Python
Python 使用requests模块发送GET和POST请求的实现代码
Sep 21 Python
用pickle存储Python的原生对象方法
Apr 28 Python
使用Python更换外网IP的方法
Jul 09 Python
Python文件如何引入?详解引入Python文件步骤
Dec 10 Python
Python的Tkinter点击按钮触发事件的例子
Jul 19 Python
python用win32gui遍历窗口并设置窗口位置的方法
Jul 26 Python
python fuzzywuzzy模块模糊字符串匹配详细用法
Aug 29 Python
Python进行特征提取的示例代码
Oct 15 Python
python中requests模拟登录的三种方式(携带cookie/session进行请求网站)
Nov 17 Python
python利用while求100内的整数和方式
Nov 07 Python
Python+Socket实现基于UDP协议的局域网广播功能示例
Aug 31 #Python
python requests 使用快速入门
Aug 31 #Python
如何高效使用Python字典的方法详解
Aug 31 #Python
利用Python爬取微博数据生成词云图片实例代码
Aug 31 #Python
Python利用ElementTree模块处理XML的方法详解
Aug 31 #Python
go和python变量赋值遇到的一个问题
Aug 31 #Python
理解Python中的绝对路径和相对路径
Aug 30 #Python
You might like
收听困难?教您超简便短波广播抗干扰方法!
2021/03/01 无线电
php中文件上传的安全问题
2006/10/09 PHP
php 获取mysql数据库信息代码
2009/03/12 PHP
使用php判断网页是否gzip压缩
2013/06/25 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
javascript 解析url的search方法
2010/02/09 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
使用jquery的ajax需要注意的地方dataType的设置
2013/08/12 Javascript
node.js+Ajax实现获取HTTP服务器返回数据
2014/11/26 Javascript
Jquery遍历Json数据的方法
2015/04/20 Javascript
javascript基础知识
2016/06/07 Javascript
极力推荐10个短小实用的JavaScript代码段
2016/08/03 Javascript
使用ionic播放轮询广告的实现方法(必看)
2017/04/24 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JS+HTML5 canvas绘制验证码示例
2018/12/05 Javascript
vue.config.js中配置Vue的路径别名的方法
2020/02/11 Javascript
vue 移动端记录页面浏览位置的方法
2020/03/11 Javascript
vant 解决tab切换插件标题样式自定义的问题
2020/11/13 Javascript
vue+Element-ui实现登录注册表单
2020/11/17 Javascript
python通过openpyxl生成Excel文件的方法
2015/05/12 Python
用python做一个搜索引擎(Pylucene)的实例代码
2017/07/05 Python
用python实现刷点击率的示例代码
2019/02/21 Python
使用Python在Windows下获取USB PID&VID的方法
2019/07/02 Python
解决django中ModelForm多表单组合的问题
2019/07/18 Python
Python 实现遥感影像波段组合的示例代码
2019/08/04 Python
opencv 获取rtsp流媒体视频的实现方法
2019/08/23 Python
Python发送邮件的实例代码讲解
2019/10/16 Python
Python注释、分支结构、循环结构、伪“选择结构”用法实例分析
2020/01/09 Python
详解pycharm2020.1.1专业版安装指南(推荐)
2020/08/07 Python
Pycharm操作Git及GitHub的步骤详解
2020/10/27 Python
.net软件工程师应聘上机试题
2015/03/10 面试题
开学季活动策划方案
2014/02/28 职场文书
文化产业实施方案
2014/06/07 职场文书
小学班级管理心得体会
2016/01/07 职场文书
MySQL中的 inner join 和 left join的区别解析(小结果集驱动大结果集)
2023/05/08 MySQL