小小聊天室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爬虫DNS解析缓存方法实例分析
Jun 02 Python
Python标准库sched模块使用指南
Jul 06 Python
利用python编写一个图片主色转换的脚本
Dec 07 Python
python 常见字符串与函数的用法详解
Nov 23 Python
python爬虫基础教程:requests库(二)代码实例
Apr 09 Python
PyQt5笔记之弹出窗口大全
Jun 20 Python
将Python文件打包成.EXE可执行文件的方法
Aug 11 Python
如何安装2019Pycharm最新版本(详细教程)
Sep 26 Python
学会python自动收发邮件 代替你问候女友
May 20 Python
keras 自定义loss model.add_loss的使用详解
Jun 22 Python
Python Celery异步任务队列使用方法解析
Aug 10 Python
python UIAutomator2使用超详细教程
Feb 19 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 fputcsv命令 写csv文件遇到的小问题(多维数组连接符)
2011/05/24 PHP
zend optimizer在wamp的基础上安装图文教程
2013/10/26 PHP
php socket客户端及服务器端应用实例
2014/07/04 PHP
CodeIgniter中使用cookie的三种方式详解
2014/07/18 PHP
PHP积分兑换接口实例
2015/02/09 PHP
laravel Task Scheduling(任务调度)在windows下的使用详解
2019/10/22 PHP
PHP基于ip2long实现IP转换整形
2020/12/11 PHP
Prototype String对象 学习
2009/07/19 Javascript
jquery滚动到顶部底部代码
2015/04/20 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
jquery实现的Accordion折叠面板效果代码
2015/09/02 Javascript
AngularJS数据源的多种获取方式汇总
2016/02/02 Javascript
javascript 封装Date日期类实例详解
2017/05/28 Javascript
Vue中定义全局变量与常量的各种方式详解
2017/08/23 Javascript
浅谈在vue项目中如何定义全局变量和全局函数
2017/10/24 Javascript
浅谈Angular单元测试总结
2019/03/22 Javascript
解决vue v-for src 图片路径问题 404
2019/11/12 Javascript
详解在Python程序中使用Cookie的教程
2015/04/30 Python
好的Python培训机构应该具备哪些条件
2018/05/23 Python
解决Python找不到ssl模块问题 No module named _ssl的方法
2019/04/29 Python
Flask配置Cors跨域的实现
2019/07/12 Python
python使用原始套接字发送二层包(链路层帧)的方法
2019/07/22 Python
在Python中画图(基于Jupyter notebook的魔法函数)
2019/10/28 Python
tensorflow如何继续训练之前保存的模型实例
2020/01/21 Python
numpy库ndarray多维数组的维度变换方法(reshape、resize、swapaxes、flatten)
2020/04/28 Python
python飞机大战游戏实例讲解
2020/12/04 Python
python matlab库简单用法讲解
2020/12/31 Python
Html5 postMessage实现跨域消息传递
2016/03/11 HTML / CSS
解析HTML5的存储功能和web SQL的相关操作方法
2016/02/19 HTML / CSS
人事档案接收函
2014/01/12 职场文书
三好学生先进事迹材料
2014/08/28 职场文书
新兵入伍心得体会
2014/09/04 职场文书
邀请函的格式
2015/01/30 职场文书
2015年电话客服工作总结
2015/05/18 职场文书
热血教师观后感
2015/06/10 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书