Python进阶之UDP和TCP通信协议实例
来源:互联网 发布:ipython 查看源码 编辑:程序博客网 时间:2024/05/22 05:59
今天有的累了。。。暂不做分析了。。。。。还有程序要写。。。明天再做详细分析UDP和TCP,
下面两个示例程序都是结合多线程去做的。
利用UDP实现仿QQ的程序:
__author__ = 'Jonny'#利用多进程和UDP通信实现一个类似QQ的通信程序from socket import *from threading import Threadimport timedef sendMsg(): global socket_qq global ip global port #用户输入消息: adress = (ip,port) while True: msg = input('<<')+'\n' socket_qq.sendto(msg.encode('gb2312'),adress)def recvMsg(): global socket_qq #绑定端口 socket_qq.bind(('',6677)) #接收消息 while True: recv_Msg = socket_qq.recvfrom(1024) #输出显示消息 msgTime = str(time.localtime()[0])+'年'+str(time.localtime()[1])+'月'+str(time.localtime()[2])+'日'+str(time.localtime()[3])+'时'+\ str(time.localtime()[4])+'分'+str(time.localtime()[5])+'秒:' print('>> '+msgTime+'\n来自[%s:%s]-->%s'%(str(recv_Msg[1][0]),str(recv_Msg[1][1]),recv_Msg[0].decode('gb2312')))def main(): #创建线程thread_recv,负责消息的接受, thread_send = Thread(target=sendMsg) #进程线程thread_send,负责消息的发送 thread_recv = Thread(target=recvMsg) #开启线程 thread_send.start() thread_recv.start() #阻塞主线程 thread_send.join() thread_recv.join()if __name__=='__main__': #创建socket对象 socket_qq = socket(AF_INET,SOCK_DGRAM) ip = input('请输入目标IP:') port = int(input('请输入端口:')) print('欢迎使用MM(vision1.0)!') main()
TCP多线程服务器,可以同时为多个用户提供文本数据(有待提高)
from socket import *from threading import Thread,Lockimport threadingdef switch(clientSocket,clientInfo): global lock while True: backMsg = '拒绝空请求!' msg = clientSocket.recv(1024) lock.acquire() if msg.decode('gb2312') == '': clientSocket.close() break print('\n>>来自:[%s:%s]-->%s'%(str(clientInfo[0]),str(clientInfo[1]),msg.decode('gb2312'))) #将用户的 if msg!= '': backMsg = input('<<输入回复'+str(clientInfo[0])+'数据信息:') clientSocket.send(backMsg.encode('gb2312')) lock.release()#接收用户请求def main(): #创建一个空集合 a = {'1'} last_a = len(a) #创建线程列表 threads_tcp = [] serverSocket = socket(AF_INET,SOCK_STREAM) #绑定端口号 serverSocket.bind(('',8088)) #让服务器套接字处于工作状态,(限制最多同时连接3个客户端): serverSocket.listen() #服务器下创建新的属于服务器的客户端,用于与外界客户端进行交流 try: while True: clientSocket,clientInfo = serverSocket.accept() clint =(clientSocket,clientInfo) a.add(clint) if len(a)> last_a: print('\n----------------###----------------') print('[%s:%s]上线!'%(str(clientInfo[0]),str(clientInfo[1]))) print('----------------###----------------') thread = Thread(target=switch,args=(clientSocket,clientInfo,)) threads_tcp.append(thread) thread.start() last_a = len(a) #关闭服务器客户端和服务器 if threading.active_count()==1: print('结束') serverSocket.close() break except Exception as e: print("服务器挂了!%s"%e)if __name__ == '__main__': lock = Lock() main()
阅读全文
0 0
- Python进阶之UDP和TCP通信协议实例
- 通信协议之Http、TCP、UDP详解
- Java之TCP和UDP代码实例
- 通信协议HTTP、TCP、UDP
- 通信协议-HTTP/TCP/UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议 - HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议 - HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- 通信协议:HTTP、TCP、UDP
- scrapy框架架构
- 2017最新最全的全国省市区五级四级三级地址数据库sql下载
- 机器学习-提升方法
- 情绪只是一种错觉?——适合减压的“冥想”
- 5.2判断奇偶性
- Python进阶之UDP和TCP通信协议实例
- 【云星数据---mesos实战系列003】:marathon实战002--marathon部署http版的hello world应用
- qt4.8.6 移植到HI3531
- 正则表达式基本语法详解
- 5.5
- Android 防止EditText软键盘使键盘上移的方法
- 字符串替换空格的最优算法
- 6.15
- 正则表达式常用的语法: