小小聊天室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 04 Python
简单介绍Python中的len()函数的使用
Apr 07 Python
python使用7z解压apk包的方法
Apr 18 Python
在Python的Flask框架下收发电子邮件的教程
Apr 21 Python
Python 常用string函数详解
May 30 Python
Swift 3.0在集合类数据结构上的一些新变化总结
Jul 11 Python
详解python实现读取邮件数据并下载附件的实例
Aug 03 Python
Python实现求两个csv文件交集的方法
Sep 06 Python
django传值给模板, 再用JS接收并进行操作的实例
May 28 Python
浅谈Python中eval的强大与危害
Mar 13 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
Python获取百度热搜的完整代码
Apr 07 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基于双向循环队列实现历史记录的前进后退等功能
2015/08/08 PHP
JavaScript 三种创建对象的方法
2009/10/16 Javascript
基于jquery的Repeater实现代码
2010/07/17 Javascript
js读取cookie方法总结
2014/10/31 Javascript
jQuery实现点击图片翻页展示效果的方法
2015/02/16 Javascript
jquery实现页面关键词高亮显示的方法
2015/03/12 Javascript
jQuery实现带水平滑杆的焦点图动画插件
2016/03/08 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
2016/04/12 Javascript
JS 拦截全局ajax请求实例解析
2016/11/29 Javascript
JavaScript+Html5实现按钮复制文字到剪切板功能(手机网页兼容)
2017/03/30 Javascript
PHP实现记录代码运行时间封装类实例教程
2017/05/08 Javascript
vue项目中用cdn优化的方法
2018/01/03 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
在Webpack中用url-loader处理图片和字体的问题
2020/04/28 Javascript
JS实现拖动模糊框特效
2020/08/25 Javascript
Javascript中window.name属性详解
2020/11/19 Javascript
[02:54]DOTA2英雄基础教程 暗影牧师戴泽
2013/12/05 DOTA
python使用PyFetion来发送短信的例子
2014/04/22 Python
简单上手Python中装饰器的使用
2015/07/12 Python
python利用Guetzli批量压缩图片
2017/03/23 Python
python爬虫之验证码篇3-滑动验证码识别技术
2019/04/11 Python
python字符串替换第一个字符串的方法
2019/06/26 Python
python多进程(加入进程池)操作常见案例
2019/10/21 Python
浅谈python3打包与拆包在函数的应用详解
2020/05/02 Python
Python matplotlib 绘制双Y轴曲线图的示例代码
2020/06/12 Python
Python 无限级分类树状结构生成算法的实现
2021/01/21 Python
CSS3+HTML5+JS 实现一个块的收缩与展开动画效果
2020/11/17 HTML / CSS
大学生专业个人学习的自我评价
2013/10/26 职场文书
二年级数学教学反思
2014/01/21 职场文书
乡镇领导班子批评与自我批评材料
2014/09/23 职场文书
领导四风问题整改措施思想汇报
2014/10/13 职场文书
城管年度个人总结
2015/02/28 职场文书
生产车间主任岗位职责
2015/04/08 职场文书
2015年销售内勤工作总结
2015/04/27 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python
Redis Cluster集群动态扩容的实现
2021/07/15 Redis