小小聊天室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中AND、OR的一个使用小技巧
Feb 18 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python高级用法总结
May 26 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
Nov 07 Python
Python/Django后端使用PIL Image生成头像缩略图
Apr 30 Python
在django中自定义字段Field详解
Dec 03 Python
python爬虫库scrapy简单使用实例详解
Feb 10 Python
python序列类型种类详解
Feb 26 Python
python操作yaml说明
Apr 08 Python
python实现单机五子棋
Aug 28 Python
pycharm2020.2 配置使用的方法详解
Sep 16 Python
Python Django / Flask如何使用Elasticsearch
Apr 19 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
后宫无数却洁身自好的男主,唐三只爱小舞
2020/03/02 国漫
PHP 金额数字转换成英文
2010/05/06 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
Laravel 已登陆用户再次查看登陆页面的自动跳转设置方法
2019/09/30 PHP
CSS常用网站布局实例
2008/04/03 Javascript
Blocksit插件实现瀑布流数据无限( 异步)加载
2014/06/20 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
jQuery焦点图轮播特效代码分享(3款)
2015/09/05 Javascript
AngularJS中的表单简单入门
2016/07/28 Javascript
深入理解React中es6创建组件this的方法
2016/08/29 Javascript
JS判断是否手机或pad访问实现方法
2016/12/09 Javascript
用js实现每隔一秒刷新时间的实例(含年月日时分秒)
2017/10/25 Javascript
js+html获取系统当前时间
2017/11/10 Javascript
用ES6的class模仿Vue写一个双向绑定的示例代码
2018/04/20 Javascript
vue实现防抖的实例代码
2021/01/11 Vue.js
[09:33]2015国际邀请赛第四日TOP10
2015/08/08 DOTA
使用Python中的cookielib模拟登录网站
2015/04/09 Python
Python黑魔法@property装饰器的使用技巧解析
2016/06/16 Python
Python多线程扫描端口代码示例
2018/02/09 Python
python实现简单遗传算法
2018/03/19 Python
python实现猜数字小游戏
2020/03/24 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
Python多进程fork()函数详解
2019/02/22 Python
python命令行参数用法实例分析
2019/06/25 Python
python调用私有属性的方法总结
2020/07/24 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
销售人员职业生涯规划范文
2014/03/01 职场文书
新闻人物通讯稿
2014/10/09 职场文书
2014年电信员工工作总结
2014/12/19 职场文书
毕业生党员个人总结
2015/02/14 职场文书
教师学习心得体会范文
2016/01/21 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
python 如何获取页面所有a标签下href的值
2021/05/06 Python
Redis特殊数据类型HyperLogLog基数统计算法讲解
2022/06/01 Redis