小小聊天室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 相关文章推荐
Python3里的super()和__class__使用介绍
Apr 23 Python
python实现将pvr格式转换成pvr.ccz的方法
Apr 28 Python
使用rst2pdf实现将sphinx生成PDF
Jun 07 Python
实例讲解Python中SocketServer模块处理网络请求的用法
Jun 28 Python
python 实现上传图片并预览的3种方法(推荐)
Jul 14 Python
numpy自动生成数组详解
Dec 15 Python
python实现桌面气泡提示功能
Jul 29 Python
Python实现直播推流效果
Nov 26 Python
django框架单表操作之增删改实例分析
Dec 16 Python
pandas 强制类型转换 df.astype实例
Apr 09 Python
python中openpyxl和xlsxwriter对Excel的操作方法
Mar 01 Python
使用tensorflow 实现反向传播求导
May 26 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 递归效率分析
2009/11/24 PHP
解析PHP生成静态html文件的三种方法
2013/06/18 PHP
php中的filesystem文件系统函数介绍及使用示例
2014/02/13 PHP
php mysqli查询语句返回值类型实例分析
2016/06/29 PHP
javascript RadioButtonList获取选中值
2009/04/09 Javascript
cookie丢失问题(认证失效) Authentication (用户验证信息)也会丢失
2009/06/04 Javascript
javascript 全等号运算符使用说明
2010/05/31 Javascript
Dom与浏览器兼容性说明
2010/10/25 Javascript
Extjs TimeField 显示正常时间格式的代码
2011/06/28 Javascript
javascript实现判断鼠标的状态
2015/07/10 Javascript
JS实现DIV高度自适应窗口示例
2017/02/16 Javascript
基于node.js制作简单爬虫教程
2017/06/29 Javascript
js原生日历的实例(推荐)
2017/10/31 Javascript
vue源码学习之Object.defineProperty对象属性监听
2018/05/30 Javascript
javascript面向对象三大特征之多态实例详解
2019/07/24 Javascript
countUp.js实现数字动态变化效果
2019/10/17 Javascript
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[46:55]完美世界DOTA2联赛决赛 FTD vs Phoenix 第三场 11.08
2020/11/11 DOTA
python实现寻找最长回文子序列的方法
2018/06/02 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
Pandas分组与排序的实现
2019/07/23 Python
python实现拉普拉斯特征图降维示例
2019/11/25 Python
Python绘图实现显示中文
2019/12/04 Python
django框架中ajax的使用及避开CSRF 验证的方式详解
2019/12/11 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
python drf各类组件的用法和作用
2021/01/12 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
Currentbody法国:健康与美容高科技产品
2020/08/16 全球购物
DOUGLAS荷兰:购买香水和化妆品
2020/10/24 全球购物
澳大利亚领先的女性运动服品牌:Lorna Jane
2020/06/19 全球购物
污水厂厂长岗位职责
2014/01/04 职场文书
信息技术教学反思
2014/02/12 职场文书
合伙经营协议书范本(通用版)
2014/12/03 职场文书
学校社团活动总结
2015/05/07 职场文书
2019餐饮行业创业计划书!
2019/06/27 职场文书
浅谈Python数学建模之固定费用问题
2021/06/23 Python