小小聊天室 Python实现
2016-07-07 16:23
281 查看
相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。
是不是很简单啊。我们需要注意的就是socket的第二个参数为
TCP方式演示结果:(注意先开启服务器端)
这里我想强调的是,注意tcp和udp创建套接字时指定的参数即可。
至于知识点相关的内容,这里就不多说了。
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学习笔记之简单文件操作
- Python的collections模块中namedtuple结构使用示例
- Python之学习所遇
- 详解Python的collections模块中的deque双端队列结构
- 欢迎使用CSDN-markdown编辑器
- Understanding Python metaclasses
- 简单掌握Python的Collections模块中counter结构的用法
- python-认识Socket[入门篇]
- 如何升级到python3版本并且安装pip3及ipython3
- python 协程库gevent学习--源码学习(一)
- Numpy--genfromtxt
- 关于递归的思考
- 安装numpy pandas matplotlib seaborn scipy
- python 在mongo 中建立索引
- Python中yield关键字(stackoverflow高票回答)
- python数学计算的工具:scipy和numpy
- python3中安装easygui的问题解决
- Python 模块学习:os模块
- Python给定一个句子倒序输出单词以及字母