小小聊天室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的判断语句模拟三目运算
Apr 24 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
python实现爬虫统计学校BBS男女比例之多线程爬虫(二)
Dec 31 Python
使用Django启动命令行及执行脚本的方法
May 29 Python
python对于requests的封装方法详解
Jan 03 Python
pytorch在fintune时将sequential中的层输出方法,以vgg为例
Aug 20 Python
pytorch .detach() .detach_() 和 .data用于切断反向传播的实现
Dec 27 Python
python实现图像拼接
Mar 05 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
django教程如何自学
Jul 31 Python
python 对象真假值的实例(哪些视为False)
Dec 11 Python
python 用递归实现通用爬虫解析器
Apr 16 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写第一个模块应用
2012/02/20 PHP
PHP中检查isset()和!empty()函数的必要性
2019/02/13 PHP
使用TextRange获取输入框中光标的位
2006/10/14 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
js控制当再次点击按钮时的间隔时间
2014/06/03 Javascript
js实现带缓冲效果的仿QQ面板折叠菜单代码
2015/09/06 Javascript
轻松学习jQuery插件EasyUI EasyUI创建菜单与按钮
2015/11/30 Javascript
学习JavaScript设计模式之中介者模式
2016/01/14 Javascript
JavaScript中的Array 对象(数组对象)
2016/06/02 Javascript
Javascript中的arguments对象
2016/06/20 Javascript
jQuery 3.0 的 setter和getter 模式详解
2016/07/11 Javascript
AngularJS递归指令实现Tree View效果示例
2016/11/07 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
Vue 2.0在IE11中打开项目页面空白的问题解决
2017/07/16 Javascript
使用JavaScript实现表格编辑器(实例讲解)
2017/08/02 Javascript
Vue2.0基于vue-cli+webpack同级组件之间的通信教程(推荐)
2017/09/14 Javascript
微信小程序支付之c#后台实现方法
2017/10/19 Javascript
浅谈webpack对样式的处理
2018/01/05 Javascript
VUE组件中的 Drawer 抽屉实现代码
2019/08/06 Javascript
微信小程序实现写入读取缓存详解
2019/08/30 Javascript
Anaconda多环境多版本python配置操作方法
2017/09/12 Python
python+VTK环境搭建及第一个简单程序代码
2017/12/13 Python
Numpy中转置transpose、T和swapaxes的实例讲解
2018/04/17 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
使用pandas把某一列的字符值转换为数字的实例
2019/01/29 Python
如何使用django的MTV开发模式返回一个网页
2019/07/22 Python
详解一种用django_cache实现分布式锁的方式
2019/09/01 Python
解决paramiko执行命令超时的问题
2020/04/16 Python
医药工作者的求职信范文
2013/09/21 职场文书
广播电视新闻学专业应届生求职信
2013/10/08 职场文书
车队司机自我鉴定
2014/03/02 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
文言文辞职信
2015/02/28 职场文书
法制教育观后感
2015/06/17 职场文书
《折线统计图》教学反思
2016/02/22 职场文书
导游词之临安白水涧
2019/11/05 职场文书