相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。
UDP方式
服务器端
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 创建一个简单的套接字监听请求
import socket
HOST = '192.168.59.255'
PORT = 9998
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.bind(('',PORT))
print '套接字已启动!'
while True:
data,addr = s.recvfrom(1024)
print addr,str(' : ')+data
客户端
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = socket的客户端的简单实现
import socket
PORT = 9998
HOST = '192.168.59.255'
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
words = raw_input('Client:')
while words != 'quit':
s.sendto(words,(HOST,PORT))
words = raw_input('Client:')
s.close()
是不是很简单啊。我们需要注意的就是socket的第二个参数为SOCK_DGRAM
。因为这和TCP方式的SOCK_STREAM
有所不同。
TCP方式
服务器端
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 简单的tcpsocket的实现
from socket import *
from time import ctime
HOST = ''
PORT = 9999
BUFFERSIZE = 1024
ADDRESS = (HOST,PORT)
s = socket(AF_INET,SOCK_STREAM)
s.bind(ADDRESS)
s.listen(5)
while True:
print 'Waiting for clients cennect!'
tcpclient,addr = s.accept()
print 'Connected By ',addr
while True:
try:
data = tcpclient.recv(BUFFERSIZE)
except Exception,e:
print e.message
tcpclient.close()
break
if not data:
print "No Data received!"
break
senddata = 'Hi,you send me:[%s]%s'%(ctime(),data.encode('utf8'))
tcpclient.send(senddata.encode('utf8'))
print addr,' Says:',ctime(),data.encode('utf8')
tcpclient.close()
s.close()
客户端
# coding:utf-8
# __author__ = 'Mark sinoberg'
# __date__ = '2016/7/7'
# __Desc__ = 简单的tcp socket客户端的实现
from socket import *
class TcpClient:
# HOST = 'localhost'
PORT = 9999
HOST = '192.168.59.225'
BUFFSIZ = 1024
ADDR = (HOST,PORT)
def __init__(self):
self.client = socket(AF_INET,SOCK_STREAM)
self.client.connect((self.HOST,self.PORT))
while True:
senddata = raw_input('>>>')
if not senddata:
print 'Please input some words!\n>>>'
continue
if senddata == "quit":
break
self.client.send(senddata.encode('utf8'))
recvdata = self.client.recv(self.BUFFSIZ)
if not recvdata:
break
print recvdata.encode('utf8')
if __name__ == "__main__":
client = TcpClient()
TCP方式演示结果:(注意先开启服务器端)
服务器端
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTCPServer.py
Waiting for clients cennect!
Connected By ('192.168.59.225', 63095)
('192.168.59.225', 63095) Says: Thu Jul 07 16:01:10 2016 Hello World
('192.168.59.225', 63095) Says: Thu Jul 07 16:01:15 2016 haode
No Data received!
Waiting for clients cennect!
客户端
D:\Software\Python2\python.exe E:/Code/Python/MyTestSet/sockettest/SimpleTcpClient.py
>>>Hello World
Hi,you send me:[Thu Jul 07 16:01:10 2016]Hello World
>>>
Please input some words!
>>>
>>>haode
Hi,you send me:[Thu Jul 07 16:01:15 2016]haode
>>>quit
Process finished with exit code 0
总结
简单的使用TCP或者是UDP确实很容易,然而要想更好的利用这两个协议,就需要好好的设计一番了。
这里我想强调的是,注意tcp和udp创建套接字时指定的参数即可。
小小聊天室 Python实现的更多相关文章
-
Node.js下基于Express + Socket.io 搭建一个基本的在线聊天室
一.聊天室简单介绍 采用nodeJS设计,基于express框架,使用WebSocket编程之 socket.io机制.聊天室增加了 注册登录模块 ,并将用户个人信息和聊天记录存入数据库. 数据库采用 ...
-
Python聊天室
小编心语:锵锵锵!各位看官注意了啊,走过路过表错过!上篇博文主要介绍了基于基于Server-Sent Event的简单在线聊天室,相信不管各位是大牛.小牛还是跟小编一样的小白,可能觉得看得不够过瘾,区 ...
-
基于select的python聊天室程序
python网络编程具体参考<python select网络编程详细介绍>. 在python中,select函数是一个对底层操作系统的直接访问的接口.它用来监控sockets.files和 ...
-
Python Socket 编程——聊天室示例程序
上一篇 我们学习了简单的 Python TCP Socket 编程,通过分别写服务端和客户端的代码了解基本的 Python Socket 编程模型.本文再通过一个例子来加强一下对 Socket 编程的 ...
-
python tornado websocket 多聊天室(返回消息给部分连接者)
python tornado 构建多个聊天室, 多个聊天室之间相互独立, 实现服务器端将消息返回给相应的部分客户端! chatHome.py // 服务器端, 渲染主页 --> 聊天室建立web ...
-
python 实现聊天室
所用模块 asyncore 官方介绍, 源码 英文捉鸡点 这里 源码中可以看到其实本质上就对 select 以及 socket 的进一步封装 简单说明 Python的asyncore模块提供了以异步 ...
-
如何用Python编写一个聊天室
一.课程介绍 1.简介 本次项目课是实现简单聊天室程序的服务器端和客户端. 2.知识点 服务器端涉及到asyncore.asynchat和socket这几个模块,客户端用到了telnetlib.wx. ...
-
Python实现文字聊天室
你是否想过用所学的Python开发一个图形界面的聊天室程序啊? 像这样的: 如果你想开发这样一个有点怀旧风格的聊天程序,那么可以接着看: 要开发这个聊天程序,你需要具备以下知识点: asyncore ...
-
Python socket聊天室程序
http://blog.csdn.net/calling_wisdom/article/details/42524745 今天用python的socket模块实现了一个聊天室的程序 虽然功能比较简单, ...
随机推荐
-
C#做窗体皮肤
网上有很好的皮肤控件 SkinEnigne可供使用: 具体步骤: 添加控件SkinEngine. 1.右键“工具箱”.“添加选项卡”,取名“皮肤”. 2.右键“皮肤”,“选择项”弹出对话框. 3.点击 ...
-
中断处理流程,ok6410
中断处理流程 CPU在工作的过程中,经常需要与外设进行交互,交互的方式包括”轮询方式”,”中断方式”. 1.轮询方式: CPU不断地查询设备的状态.该方式实现比较简单,但CPU利用率很低,不适合多任务 ...
-
[POJ 2443] Set Operation (bitset)
题目链接:http://poj.org/problem?id=2443 题目大意:给你N个集合,每个集合里有若干个数.M个查询,每个查询有a,b两个数.问是否存在一个集合同时包含a,b这两个数.若存在 ...
-
Network boot from AMD Am79C970A
用虚拟机安装winxp系统,出现错误信息如下: Network boot from AMD Am79C970A Copright (c)2003-2005 Vmware, Inc. Copright ...
-
jQuery tmpl index
<!-- 校验失败后显示 TODO--> <script id="checkError_table_tmpl" type="text/x-handleb ...
-
关于LAMP的配置之(虚拟机的安装、创建、配置)
一.先安装好VMware (1)根据电脑系统是多少位的,可以从网上下载相应的虚拟机VMware (2)下载好了之后,就可以先行安装虚拟机,双击打开VMware的安装程序 (3)再出现的对话框中,点击& ...
-
洛谷P2347 砝码称重 【多重背包】(方案数)(经典)
题目链接:https://www.luogu.org/problemnew/show/P2347 题目描述 设有1g.2g.3g.5g.10g.20g的砝码各若干枚(其总重<=1000), 输入 ...
-
tablib.Dataset()操作exl类型数据之“类方法”研究
#tablib.Dataset()操作exl类型数据之“类方法”研究 import tablib #初始化 data=tablib.Dataset() #设置列标题 data.headers=('na ...
-
【JS】点击页面判断是否安装app并打开,否则跳转下载的方法
应用场景 App产品在运营推广上有一个需求,就是要求可以让用户在访问我们的推广网页时,就可以判断出这个用户手机上是否安装了我们的App,如果安装了则可以直接在网页上打开,否则就引导用户前往下载.从而形 ...
-
【vue入门】日志demo,增删改查的练习(无vuex版本)
安装 1. 确定电脑已装node和npm 出现版本号则说明电脑已经安装好node和npm2. 创建一个基于webpack的项目 3. 在项目里安装依赖 4. 运行 配置路由为了动态渲染各个页面的组 ...