小小聊天室Python代码实现
Python  /  管理员 发布于 7年前   512
相对于Java方式的聊天室,Python同样可以做得到。而且可以做的更加的优雅。想必少了那么多的各种流的Python Socket,你一定会喜欢的。
至于知识点相关的内容,这里就不多说了。
UDP方式
服务器端
# coding:utf-8# __author__ = 'Mark sinoberg'# __date__ = '2016/7/7'# __Desc__ = 创建一个简单的套接字监听请求import socketHOST = '192.168.59.255'PORT = 9998s = 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 socketPORT = 9998HOST = '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 ctimeHOST = ''PORT = 9999BUFFERSIZE = 1024ADDRESS = (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创建套接字时指定的参数即可。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号
