用python实现一个简单的聊天功能,tcp,udp,socketserver版本
基于tcp协议版本
服务器端
import socket server = socket.socket()
server.bind(('127.0.0.1', 8001))
server.listen(5) flag = 1
while flag:
conn, addr = server.accept() while 1:
send_msg = input('msg:').strip().lower()
conn.send(send_msg.encode())
if send_msg == 'q':
flag = 0
break
msg = conn.recv(1024).decode()
if msg == 'q': break
print(msg)
print('当前客户端断开连接等待新的连接')
cmd = input('输入(q)退出,其他返回聊天:').strip().lower()
if cmd == 'q':
flag = 0
conn.close() server.close()
客户端
import socket client = socket.socket()
client.connect(('127.0.0.1', 8001))
while 1:
# client.send(b'byebye')
msg = client.recv(1024).decode().lower()
print(msg)
if msg == 'q': break
send_msg = input('msg:').lower().strip()
client.send(send_msg.encode())
if send_msg == 'q': break client.close()
基于tcp协议socketserver版本
服务器端
import socketserver class Myserver(socketserver.BaseRequestHandler):
def handle(self):
conn = self.request # 相当于conn = server.accept()
while True: msg = conn.recv(1024).decode()
print(msg)
content = input('>>>>')
conn.send(content.encode()) server = socketserver.ThreadingTCPServer(('127.0.0.1', 8001), Myserver) server.serve_forever()
客户端
import socket
client = socket.socket()
client.connect(('127.0.0.1', 8001))
while True:
content = input('>>>>')
client.send(content.encode())
msg = client.recv(1024).decode()
print(msg)
client.close()
基于udp协议版本
服务器端
import socket server = socket.socket(type=socket.SOCK_DGRAM)
server.bind(('127.0.0.1', 9000))
while True:
msg, clt_addr = server.recvfrom(1024)
print(msg.decode())
content = input('>>>')
server.sendto(content.encode(), clt_addr) sk.close()
客户端
import socket client = socket.socket(type=socket.SOCK_DGRAM) count = 0
while True:
count += 1
content = input('>>>')
content = '%s : %s' % (count, content)
client.sendto(content.encode(), ('127.0.0.1', 9000))
msg, addr = client.recvfrom(1024)
print(msg.decode()) sk.close()
用python实现一个简单的聊天功能,tcp,udp,socketserver版本的更多相关文章
- 通过python 构建一个简单的聊天服务器
构建一个 Python 聊天服务器 一个简单的聊天服务器 现在您已经了解了 Python 中基本的网络 API:接下来可以在一个简单的应用程序中应用这些知识了.在本节中,将构建一个简单的聊天服务器.使 ...
- Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能
本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...
- python练习四—简单的聊天软件
python最强大的是什么?库支持!!有了强大的库支持,一个简单的聊天软件实现就更简单了,本项目思路如下 # 项目思路 1. 服务器的工作 * 初始化服务器 * 新建一个聊天房间 * 维护一个已链接用 ...
- 采用tcp协议和UDP协议实现简单的聊天功能
Date: 2019-06-19 Author: Sun 一. Python3输出带颜色字体 实现过程: 终端的字符颜色是用转义序列控制的,是文本模式下的系统显示功能,和具体的语言无关. 转义 ...
- 用Python写一个简单的Web框架
一.概述 二.从demo_app开始 三.WSGI中的application 四.区分URL 五.重构 1.正则匹配URL 2.DRY 3.抽象出框架 六.参考 一.概述 在Python中,WSGI( ...
- TensorFlow练习13: 制作一个简单的聊天机器人
现在很多卖货公司都使用聊天机器人充当客服人员,许多科技巨头也纷纷推出各自的聊天助手,如苹果Siri.Google Now.Amazon Alexa.微软小冰等等.前不久有一个视频比较了Google N ...
- 用Python编写一个简单的Http Server
用Python编写一个简单的Http Server Python内置了支持HTTP协议的模块,我们可以用来开发单机版功能较少的Web服务器.Python支持该功能的实现模块是BaseFTTPServe ...
- [SignalR]一个简单的聊天室
原文:[SignalR]一个简单的聊天室 1.说明 开发环境:Microsoft Visual Studio 2010 以及需要安装NuGet. 2.添加SignalR所需要的类库以及脚本文件: 3. ...
- 用Go语言实现一个简单的聊天机器人
一.介绍 目的:使用Go语言写一个简单的聊天机器人,复习整合Go语言的语法和基础知识. 软件环境:Go1.9,Goland 2018.1.5. 二.回顾 Go语言基本构成要素:标识符.关键字.字面量. ...
随机推荐
- thinkphp5的mkdir() Permission denied问题
最近一直在用tp5写项目,在此遇到的问题也比较多.今天来谈谈“mkdir() Permission denied”错误. 你如果不仅仅写代码,还得部署到线上,那么这个tp5的这个错误,你有很大概率会遇 ...
- vue 学前班003(生命周期)
ue把整个生命周期划分为创建.挂载.更新.销毁等阶段,每个阶段都会给一些“钩子”让我们来做一些我们想实现的动作.学习实例的生命周期,能帮助我们理解vue实例的运作机制,更好地合理利用各个钩子来完成我们 ...
- ReentrantLock锁的释放
一:代码 reentrantLock.unlock(); 虽然只有一句,但是源码却比较多: public final boolean release(int arg) { if (tryRelease ...
- iOS-实现对象拷贝【对象拷贝】
对象引用 NSCopying 代理 .h @interface xk : NSObject <NSCopying> @property (nonatomic, copy) NSString ...
- 如何正确的加载和执行 JavaScript 代码
无论当前 JavaScript 代码是内嵌还是在外链文件中,页面的下载和渲染都必须停下来等待脚本执行完成.JavaScript 执行过程耗时越久,浏览器等待响应用户输入的时间就越长.浏览器在下载和执行 ...
- docker学习(2)--基础命令
转载请注明源出处:http://www.cnblogs.com/lighten/p/6875355.html 1.基本命令 搭建好docker环境之后,使用docker help命令查看docker的 ...
- Java学习之路(十二):IO流<三>
复习:序列流 序列流可以把多个字节输入整合成一个,从序列流中读取到数据时,将从被整合的第一个流开始读取,读完这个后,然后开始读取第二个流,依次向后推. 详细见上一篇文章 ByteArrayOutput ...
- OpenGL12-shader(GLSL)着色语言3-(属性参数)(代码已上传)
上一个例程中,使用了uniform 类型的变量,uniform可以理解为全局变量,这一节中使用 的是attribute类型的变量,翻译过来就是属性,他是与顶点绑定的,就意味着一个顶点可以 有很多个属性 ...
- Python的Django框架中forms表单类的使用方法详解
用户表单是Web端的一项基本功能,大而全的Django框架中自然带有现成的基础form对象,本文就Python的Django框架中forms表单类的使用方法详解. Form表单的功能 自动生成HTML ...
- 常见的接口与类 -- Comparable
目录 1. 接口概述 2. 接口方法详读 3. 接口方法的实践操作 3.1 String和Integer对于compareTo()的实现 正文 接口Comparable 我们在字符串中见到过Comp ...