小小聊天室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处理html转义字符的方法详解
Jul 01 Python
Python连接phoenix的方法示例
Sep 29 Python
利用scrapy将爬到的数据保存到mysql(防止重复)
Mar 31 Python
PyTorch基本数据类型(一)
May 22 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
python numpy 反转 reverse示例
Dec 04 Python
彻底搞懂 python 中文乱码问题(深入分析)
Feb 28 Python
Python爬虫:Request Payload和Form Data的简单区别说明
Apr 30 Python
对python中arange()和linspace()的区别说明
May 03 Python
django 连接数据库出现1045错误的解决方式
May 14 Python
安装Anaconda3及使用Jupyter的方法
Oct 27 Python
使用Python快速打开一个百万行级别的超大Excel文件的方法
Mar 02 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
Yii CGridView用法实例详解
2016/07/12 PHP
PHP常见数组排序方法小结
2018/08/20 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
jQuery的学习步骤
2011/02/23 Javascript
JQuery1.6 使用方法三
2011/11/23 Javascript
关于extjs4如何获取grid修改后的数据的问题
2013/08/07 Javascript
通过$(this)使用jQuery包装后的方法或属性
2014/05/18 Javascript
jQuery实现鼠标滚轮动态改变样式或效果
2015/01/05 Javascript
JS实现简易图片轮播效果的方法
2015/03/25 Javascript
jQuery往返城市和日期查询实例讲解
2015/10/09 Javascript
js针对ip地址、子网掩码、网关的逻辑性判断
2016/01/06 Javascript
JS设置CSS样式的方式汇总
2017/01/21 Javascript
DOM事件探秘篇
2017/02/15 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
2017/03/06 Javascript
微信小程序使用Promise简化回调
2018/02/06 Javascript
微信小程序wx.request拦截器使用详解
2019/07/09 Javascript
Node.js fs模块原理及常见用途
2020/10/22 Javascript
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
[04:52]2015国际邀请赛LGD战队晋级之路
2015/08/14 DOTA
跟老齐学Python之通过Python连接数据库
2014/10/28 Python
简单解析Django框架中的表单验证
2015/07/17 Python
Python 装饰器使用详解
2017/07/29 Python
如何用python整理附件
2018/05/13 Python
python3实现爬取淘宝美食代码分享
2018/09/23 Python
详解PyCharm+QTDesigner+PyUIC使用教程
2019/06/13 Python
Python中zip()函数的简单用法举例
2019/09/02 Python
详解基于Jupyter notebooks采用sklearn库实现多元回归方程编程
2020/03/25 Python
用python给csv里的数据排序的具体代码
2020/07/17 Python
canvas如何实现多张图片编辑的图片编辑器
2020/03/10 HTML / CSS
农药学硕士毕业生自荐信
2013/09/25 职场文书
中学生校园广播稿
2014/01/16 职场文书
2014年个人师德工作总结
2014/12/04 职场文书
2019年最新证婚词精选集!
2019/06/28 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
HTML+CSS 实现顶部导航栏菜单制作
2021/06/03 HTML / CSS
react 路由Link配置详解
2021/11/11 Javascript