小小聊天室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多线程爬虫实战_爬取糗事百科段子的实例
Dec 15 Python
python 判断网络连通的实现方法
Apr 22 Python
python验证码识别教程之利用投影法、连通域法分割图片
Jun 04 Python
Python实现随机创建电话号码的方法示例
Dec 07 Python
Python后台开发Django的教程详解(启动)
Apr 08 Python
Python利用sqlacodegen自动生成ORM实体类示例
Jun 04 Python
python实现登录密码重置简易操作代码
Aug 14 Python
python try except返回异常的信息字符串代码实例
Aug 15 Python
vim自动补全插件YouCompleteMe(YCM)安装过程解析
Oct 21 Python
pytorch数据预处理错误的解决
Feb 20 Python
python3通过subprocess模块调用脚本并和脚本交互的操作
Dec 05 Python
如何用tempfile库创建python进程中的临时文件
Jan 28 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
ThinkPHP写数组插入与获取最新插入数据ID实例
2014/11/03 PHP
php生成随机颜色方法汇总
2014/12/03 PHP
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
开发跨浏览器javascript常见注意事项
2009/01/01 Javascript
jQuery中判断一个元素是否为另一个元素的子元素(或者其本身)
2012/03/21 Javascript
jQuery验证元素是否为空的两种常用方法
2015/03/17 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
javascript实现图片延迟加载方法汇总(三种方法)
2015/08/27 Javascript
JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
2015/12/04 Javascript
JavaScript学习小结之被嫌弃的eval函数和with语句实例详解
2016/08/01 Javascript
webpack多页面开发实践
2017/12/18 Javascript
Vue工程模板文件 webpack打包配置方法
2017/12/26 Javascript
使用Angular CLI从蓝本生成代码详解
2018/03/24 Javascript
Vue.js 踩坑记之双向绑定
2018/05/03 Javascript
vue 设置路由的登录权限的方法
2018/07/03 Javascript
微信小程序swiper实现滑动放大缩小效果
2018/11/15 Javascript
js纯前端实现腾讯cos文件上传功能的示例代码
2019/05/14 Javascript
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
使用JavaScript获取Django模板指定键值数据
2020/05/27 Javascript
[15:20]DOTA2-DPC中国联赛 正赛 Elephant vs Aster 选手采访
2021/03/11 DOTA
一则python3的简单爬虫代码
2014/05/26 Python
Python根据成绩分析系统浅析
2019/02/11 Python
Python简直是万能的,这5大主要用途你一定要知道!(推荐)
2019/04/03 Python
Python实现栈的方法详解【基于数组和单链表两种方法】
2020/02/22 Python
收集的7个CSS3代码生成工具
2010/04/17 HTML / CSS
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
全球最大的户外用品零售商之一:The House
2018/06/12 全球购物
安全生产月活动总结
2014/05/04 职场文书
国防教育标语
2014/10/08 职场文书
领导班子三严三实心得体会
2014/10/13 职场文书
感谢师恩主题班会
2015/08/17 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
springboot @ConfigurationProperties和@PropertySource的区别
2021/06/11 Java/Android