小小聊天室Python代码实现


Posted in Python onAugust 17, 2016

相对于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 相关文章推荐
Python使用xlrd模块操作Excel数据导入的方法
May 26 Python
Python中exit、return、sys.exit()等使用实例和区别
May 28 Python
解读Django框架中的低层次缓存API
Jul 24 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 Python
itchat接口使用示例
Oct 23 Python
Tornado实现多进程/多线程的HTTP服务详解
Jul 25 Python
关于TensorFlow新旧版本函数接口变化详解
Feb 10 Python
Django认证系统user对象实现过程解析
Mar 02 Python
python 使用事件对象asyncio.Event来同步协程的操作
May 04 Python
浅析Python 字符编码与文件处理
Sep 24 Python
Jupyter安装链接aconda实现过程图解
Nov 02 Python
http通过StreamingHttpResponse完成连续的数据传输长链接方式
Feb 12 Python
python如何在终端里面显示一张图片
Aug 17 #Python
动感网页相册 python编写简单文件夹内图片浏览工具
Aug 17 #Python
Python入门教程之运算符与控制流
Aug 17 #Python
python 循环while和for in简单实例
Aug 16 #Python
Python自动化测试ConfigParser模块读写配置文件
Aug 15 #Python
Python自动化测试Eclipse+Pydev 搭建开发环境
Aug 15 #Python
详解python的几种标准输出重定向方式
Aug 15 #Python
You might like
PHP设计模式之结构模式的深入解析
2013/06/13 PHP
php加密之discuz内容经典加密方式实例详解
2017/02/04 PHP
微信公众号开发之获取位置信息php代码
2018/06/13 PHP
Thinkphp5.0框架的Db操作实例分析【连接、增删改查、链式操作等】
2019/10/11 PHP
ThinkPhP+Apache+PHPstorm整合框架流程图解
2020/11/23 PHP
IE6下通过a标签点击切换图片的问题
2010/11/14 Javascript
有关于eclipse配置spket需要注意的一些地方
2013/04/07 Javascript
使用js对select动态添加和删除OPTION示例代码
2013/08/12 Javascript
不同Jquery版本引发的问题解决
2013/10/14 Javascript
jquery+ajax验证不通过也提交表单问题处理
2014/12/12 Javascript
JQuery报错Uncaught TypeError: Illegal invocation的处理方法
2015/03/13 Javascript
jquery+ajax实现直接提交表单实例分析
2016/06/17 Javascript
第三篇Bootstrap网格基础
2016/06/21 Javascript
微信小程序 教程之模板
2016/10/18 Javascript
AngularJs验证重复密码的方法(两种)
2016/11/25 Javascript
利用jQuery来动态为属性添加或者删除属性的简单方法
2016/12/02 Javascript
利用imgareaselect辅助后台实现图片上传裁剪
2017/03/02 Javascript
详解node.js平台下Express的session与cookie模块包的配置
2017/04/26 Javascript
详解vue axios中文文档
2017/09/12 Javascript
JavaScript实现的仿新浪微博原生态输入字数即时检查功能【兼容IE6】
2017/09/26 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
nodemon实现Typescript项目热更新的示例代码
2019/11/19 Javascript
vue+elementUI 实现内容区域高度自适应的示例
2020/09/26 Javascript
[49:21]2018DOTA2亚洲邀请赛3月30日 小组赛B组 Effect VS iG
2018/03/31 DOTA
[49:02]KG vs Infamous 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
python进行文件对比的方法
2018/12/24 Python
Python 隐藏输入密码时屏幕回显的实例
2019/02/19 Python
python3.8 微信发送服务器监控报警消息代码实现
2019/11/05 Python
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
会计岗位职责范本
2014/03/07 职场文书
六一亲子活动总结
2014/07/01 职场文书
董事会决议范本
2015/07/01 职场文书
情况说明书怎么写
2015/10/08 职场文书
Oracle创建只读账号的详细步骤
2021/06/07 Oracle
CSS3 Tab动画实例之背景切换动态效果
2021/08/23 HTML / CSS
在HTML中引入CSS的几种方式介绍
2021/12/06 HTML / CSS