小小聊天室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中的面向对象编程详解(上)
Apr 13 Python
深入Python函数编程的一些特性
Apr 13 Python
编写Python脚本来获取Google搜索结果的示例
May 04 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
Python基于回溯法子集树模板解决选排问题示例
Sep 07 Python
TensorFlow中权重的随机初始化的方法
Feb 11 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
对pyqt5多线程正确的开启姿势详解
Jun 14 Python
Python的log日志功能及设置方法
Jul 11 Python
利用Python自动化操作AutoCAD的实现
Apr 01 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
May 22 Python
python爬虫请求头的使用
Dec 01 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
基于pear auth实现登录验证
2010/02/26 PHP
发款php蜘蛛统计插件只要有mysql就可用
2010/10/12 PHP
DEDE采集大师官方留后门的删除办法
2011/01/08 PHP
PHP设计模式之适配器模式代码实例
2015/05/11 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
解析PHP之提取多维数组指定列的方法
2017/01/03 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
基于jquery tab切换(防止页面刷新)
2012/05/23 Javascript
JQUERY表单暂存功能插件分享
2016/02/23 Javascript
仅9张思维导图帮你轻松学习Javascript 就这么简单
2016/06/01 Javascript
性能优化之代码优化页面加载速度
2017/03/01 Javascript
node跨域转发 express+http-proxy-middleware的使用
2018/05/31 Javascript
基于vue cli 通过命令行传参实现多环境配置
2018/07/12 Javascript
vue2.0+vue-router构建一个简单的列表页的示例代码
2019/02/13 Javascript
layui table 复选框跳页后再回来保持原来选中的状态示例
2019/10/26 Javascript
JavaScript交换两个变量方法实例
2019/11/25 Javascript
JQuery中DOM节点的操作与访问方法实例分析
2019/12/23 jQuery
微信小程序中的video视频实现 自定义播放按钮、封面图、视频封面上文案
2020/01/02 Javascript
linux下安装easy_install的方法
2013/02/10 Python
python常见排序算法基础教程
2017/04/13 Python
Python通过命令开启http.server服务器的方法
2017/11/04 Python
Tensorflow 合并通道及加载子模型的方法
2018/07/26 Python
python与pycharm有何区别
2020/07/01 Python
python实现人性化显示金额数字实例详解
2020/09/25 Python
HTML5 贪吃蛇游戏实现思路及源代码
2013/09/03 HTML / CSS
美国最大的珠宝首饰网上商城:Jewelry.com
2016/07/22 全球购物
纽约通行卡:The New York Pass(免费游览纽约90多个景点)
2017/07/29 全球购物
后勤主管岗位职责
2014/03/01 职场文书
老龄工作先进事迹
2014/08/15 职场文书
计生办班子群众路线教育实践活动个人对照检查材料思想汇报
2014/10/04 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
湖南省召开党的群众路线教育实践活动总结大会报告
2014/10/21 职场文书
模范班主任事迹材料
2014/12/17 职场文书
元旦主持词开场白
2015/05/29 职场文书
Python爬取科目四考试题库的方法实现
2021/03/30 Python
python自动统计zabbix系统监控覆盖率的示例代码
2021/04/03 Python