小小聊天室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、Javascript中的闭包比较
Feb 04 Python
进一步探究Python中的正则表达式
Apr 28 Python
python实现比较两段文本不同之处的方法
May 30 Python
python+pyqt实现右下角弹出框
Oct 26 Python
浅谈Python NLP入门教程
Dec 25 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
Oct 29 Python
python @classmethod 的使用场合详解
Aug 23 Python
python 实现单通道转3通道
Dec 03 Python
Python range与enumerate函数区别解析
Feb 28 Python
Python爬虫设置ip代理过程解析
Jul 20 Python
Python中pass的作用与使用教程
Nov 13 Python
python空元组在all中返回结果详解
Dec 15 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自动提交表单的方法(基于fsockopen与curl)
2016/05/09 PHP
Smarty变量用法详解
2016/05/11 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
PHP7 foreach() 函数修改
2021/03/09 PHP
JavaScript 函数调用规则
2009/09/14 Javascript
file模式访问网页时iframe高度自适应解决方案
2013/01/16 Javascript
Ajax提交与传统表单提交的区别说明
2014/02/07 Javascript
详解webpack分包及异步加载套路
2017/06/29 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
Scala解析Json字符串的实例详解
2017/10/11 Javascript
vue中简单弹框dialog的实现方法
2018/02/26 Javascript
React+Webpack快速上手指南(小结)
2018/08/15 Javascript
JavaScript中filter的用法实例分析
2019/02/27 Javascript
layui之table checkbox初始化时选中对应选项的方法
2019/09/02 Javascript
[03:01]2014DOTA2国际邀请赛 小组赛7月13日TOPPLAY
2014/07/14 DOTA
python获取图片颜色信息的方法
2015/03/18 Python
Python的math模块中的常用数学函数整理
2016/02/04 Python
PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形
2019/05/13 Python
Python如何使用字符打印照片
2020/01/03 Python
Django 自定义404 500等错误页面的实现
2020/03/08 Python
python实现TCP文件传输
2020/03/20 Python
Python爬取微信小程序通用方法代码实例详解
2020/09/29 Python
浅析python连接数据库的重要事项
2021/02/22 Python
css3制作彩色边线3d立体按钮的示例(css3按钮)
2014/05/06 HTML / CSS
详解基于canvas的视频遮罩插件
2018/01/04 HTML / CSS
魔声耳机官方网站:Monster是世界第一品牌的高性能耳机
2016/10/26 全球购物
美国紧身牛仔裤品牌:NYDJ
2017/05/24 全球购物
后勤副校长自我鉴定
2013/10/13 职场文书
测绘工程个人的自我评价
2013/11/10 职场文书
创业计划书如何吸引他人眼球
2014/01/10 职场文书
银行存款证明样本
2014/01/17 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
新书发布会策划方案
2014/06/09 职场文书
水污染治理工程专业自荐信
2014/06/21 职场文书
党校个人总结
2015/03/04 职场文书
彻底卸载VMware虚拟机的超详细步骤记录
2022/07/15 Servers