小小聊天室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的Flask框架中Flask-Admin库的简单入门指引
Apr 07 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
SQLite3中文编码 Python的实现
Jan 11 Python
你真的了解Python的random模块吗?
Dec 12 Python
值得收藏,Python 开发中的高级技巧
Nov 23 Python
Python facenet进行人脸识别测试过程解析
Aug 16 Python
python基础 range的用法解析
Aug 23 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
Feb 14 Python
django-crontab实现服务端的定时任务的示例代码
Feb 17 Python
python数据预处理方式 :数据降维
Feb 24 Python
Python利用Turtle绘制哆啦A梦和小猪佩奇
Apr 04 Python
Python中的 enumerate和zip详情
May 30 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 Cookie处理函数
2016/06/10 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
前淘宝前端开发工程师阿当的PPT中有JS技术理念问题
2010/01/15 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
Angular中的Promise对象($q介绍)
2015/03/03 Javascript
最简单的JavaScript验证整数、小数、实数、有效位小数正则表达式
2015/04/17 Javascript
JS遍历数组及打印数组实例分析
2016/01/21 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
JS中如何实现Laravel的route函数详解
2017/02/12 Javascript
ES6学习教程之Map的常用方法总结
2017/08/03 Javascript
requireJS模块化实现返回顶部功能的方法详解
2017/10/16 Javascript
把vue-router和express项目部署到服务器的方法
2018/02/21 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
js实现网页同时进行多个倒计时功能
2019/02/25 Javascript
详解如何搭建mpvue框架搭配vant组件库的小程序项目
2019/05/16 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
[36:16]完美世界DOTA2联赛PWL S3 access vs Rebirth 第一场 12.19
2020/12/24 DOTA
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
django admin组件使用方法详解
2019/07/19 Python
Python基于类路径字符串获取静态属性
2020/03/12 Python
pygame用blit()实现动画效果的示例代码
2020/05/28 Python
HTML5标签与HTML4标签的区别示例介绍
2013/07/18 HTML / CSS
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
中国最大隐形眼镜网上商城:视客眼镜网
2016/10/30 全球购物
服装设计专业毕业生推荐信
2013/11/09 职场文书
行政经理的岗位职责
2013/11/23 职场文书
2014年教师节寄语
2014/04/03 职场文书
二年级班级文化建设方案
2014/05/10 职场文书
数学教师个人总结
2015/02/06 职场文书
2015年读书月活动总结
2015/03/26 职场文书
活动总结模板大全
2015/05/11 职场文书
师范生见习总结范文
2015/06/23 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
MySQL创建定时任务
2022/01/22 MySQL
redis lua限流算法实现示例
2022/07/15 Redis