小小聊天室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实现一个简单的MySQL类
Jan 07 Python
python实现端口转发器的方法
Mar 13 Python
Python爬豆瓣电影实例
Feb 23 Python
python读取文本中数据并转化为DataFrame的实例
Apr 10 Python
python3+PyQt5实现自定义流体混合窗口部件
Apr 24 Python
Selenium鼠标与键盘事件常用操作方法示例
Aug 13 Python
python使用selenium登录QQ邮箱(附带滑动解锁)
Jan 23 Python
Python环境Pillow( PIL )图像处理工具使用解析
Sep 12 Python
python随机生成库faker库api实例详解
Nov 28 Python
python实现126邮箱发送邮件
May 20 Python
Python Selenium实现无可视化界面过程解析
Aug 25 Python
详解Pytorch显存动态分配规律探索
Nov 17 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面向对象编程快速入门
2006/10/09 PHP
PHP 字符截取 解决中文的截取问题,不用mb系列
2009/09/29 PHP
php下mysql数据库操作类(改自discuz)
2010/07/03 PHP
一些php项目中比较通用的php自建函数的详解
2013/06/06 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
用jscript实现列出安装的软件列表
2007/06/18 Javascript
给js文件传参数(详解)
2014/07/13 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
浅谈EasyUI中编辑treegrid的方法
2015/03/01 Javascript
js实现tab切换效果实例
2015/09/16 Javascript
基于JS实现发送短信验证码后的倒计时功能(无视页面刷新,页面关闭不进行倒计时功能)
2016/09/02 Javascript
AngularJS实现单独作用域内的数据操作
2016/09/05 Javascript
判断横屏竖屏(三种)
2017/02/13 Javascript
jQuery插件HighCharts绘制的2D堆柱状图效果示例【附demo源码下载】
2017/03/14 Javascript
JS库之ParticlesJS使用简介
2017/09/12 Javascript
vue 指定组件缓存实例详解
2018/04/01 Javascript
jQuery轻量级表单模型验证插件
2018/10/15 jQuery
vue 父组件中调用子组件函数的方法
2019/06/06 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
JavaScript中作用域链的概念及用途讲解
2020/08/06 Javascript
Python之读取TXT文件的方法小结
2018/04/27 Python
Python第三方Window模块文件的几种安装方法
2018/11/22 Python
python变量的作用域是什么
2020/05/26 Python
HTML5 Canvas渐进填充与透明实现图像的Mask效果
2013/07/11 HTML / CSS
Java语言程序设计测试题改错题部分
2014/07/22 面试题
测绘工程系学生的自我评价
2013/11/30 职场文书
光荣入党自我鉴定
2014/01/22 职场文书
普通简短的个人自我评价
2014/02/15 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
工作保证书怎么写
2015/02/28 职场文书
2015年度对口支援工作总结
2015/07/22 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
JS 4个超级实用的小技巧 提升开发效率
2021/10/05 Javascript
JavaScript设计模式之原型模式详情
2022/06/21 Javascript
mysql全面解析json/数组
2022/07/07 MySQL