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自动调用IE打开某个网站的方法
Jun 03 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
Python基于多线程操作数据库相关问题分析
Jul 11 Python
python lambda表达式在sort函数中的使用详解
Aug 28 Python
python之yield和Generator深入解析
Sep 18 Python
如何给Python代码进行加密
Jan 10 Python
Python发起请求提示UnicodeEncodeError错误代码解决方法
Apr 21 Python
如何基于windows实现python定时爬虫
May 01 Python
终于搞懂了Keras中multiloss的对应关系介绍
Jun 22 Python
python selenium 获取接口数据的实现
Dec 07 Python
Python基于argparse与ConfigParser库进行入参解析与ini parser
Feb 02 Python
Python基本知识点总结
Apr 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
一个ftp类(ini.php)
2006/10/09 PHP
PHP实现图片自动清理的方法
2015/07/08 PHP
PHP如何实现Unicode和Utf-8编码相互转换
2015/07/29 PHP
Dom 学习总结以及实例的使用介绍
2013/04/24 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
使用JavaScript进行进制转换将字符串转换为十进制
2014/09/21 Javascript
js过滤HTML标签完整实例
2015/11/26 Javascript
Bootstrap中CSS的使用方法
2016/02/17 Javascript
全面介绍javascript实用技巧及单竖杠
2016/07/18 Javascript
AngularJS 作用域详解及示例代码
2016/08/17 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
简单几步实现返回顶部效果
2016/12/05 Javascript
浅析vue-router jquery和params传参(接收参数)$router $route的区别
2018/08/03 jQuery
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
JavaScript学习笔记之数组基本操作示例
2019/01/09 Javascript
如何通过setTimeout理解JS运行机制详解
2019/03/23 Javascript
layer关闭当前窗口页面以及确认取消按钮的方法
2019/09/09 Javascript
Js视频播放器插件Video.js使用方法详解
2020/02/04 Javascript
解决vant title-active-color与title-inactive-color不生效问题
2020/11/03 Javascript
树莓派中python获取GY-85九轴模块信息示例
2013/12/05 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
对pyqt5多线程正确的开启姿势详解
2019/06/14 Python
Python整数对象实现原理详解
2019/07/01 Python
python 服务器运行代码报错ModuleNotFoundError的解决办法
2020/09/16 Python
python palywright库基本使用
2021/01/21 Python
台湾乐天市场:日本No.1的网路购物网站
2017/03/22 全球购物
巴西独家产品和现场演示购物网站:Shoptime
2019/07/11 全球购物
工商学院毕业生自荐信
2013/11/12 职场文书
优秀的应届生自荐信
2014/05/23 职场文书
八项规定对照检查材料
2014/08/31 职场文书
精神文明建设汇报材料
2014/12/24 职场文书
财务总监岗位职责
2015/02/03 职场文书
Navicat连接MySQL错误描述分析
2021/06/02 MySQL
MyBatis-Plus 批量插入数据的操作方法
2021/09/25 Java/Android
mysql 索引的数据结构为什么要采用B+树
2022/04/26 MySQL
python 单机五子棋对战游戏
2022/04/28 Python