python前后台tcp/udp通讯示例
以下代码兼容python2.7+、python3
TCP示例
服务器 -- sever_tcp.py
#!/usr/bin/env python
#coding=utf-8 import time
import socket
import threading local_addr = ('127.0.0.1',8888)
buff_len = 1024 def conn_proc(sock, addr): print('accept new connection from %s:%s...' % addr)
# 发送数据给客户端
sock.send('welcome'.encode('utf-8')) while True: print('wating for message...')
# 阻塞接收客户端数据
date = sock.recv(buff_len)
if not date or date.decode('utf-8')=='exit':
break
print(date.decode('utf-8')) time.sleep(1.5)
sock.send(('server '+str(time.time())).encode('utf-8')) sock.close()
print('close connection %s:%s' % addr) if __name__ == '__main__': # 创建一个socket
tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定监听的地址和端口
tcp.bind(local_addr)
# 开始监听端口,等待连接的最大数量为10
tcp.listen(10) while True:
# 阻塞等待客户端过来的tcp连接
sock,addr = tcp.accept()
# 创建一个新线程来处理TCP连接
threading.Thread(target=conn_proc,args=(sock,addr)).start() # 关闭socket
tcp.close()
打印log如下:
accept new connection from 127.0.0.1:51241...
wating for message...
hello server.1563353570.55
wating for message...
1563353572.05
客户端 -- client_tcp.py
#!/usr/bin/env python
#coding=utf-8 import time
import socket server_addr = ('127.0.0.1',8888)
buff_len = 1024 if __name__ == '__main__': # 创建一个socket
tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
# 建立连接
tcp.connect(server_addr) # 发送数据给服务器
tcp.send('hello server.'.encode('utf-8'))
# 阻塞接收服务器数据
print(tcp.recv(buff_len).decode('utf-8')) while True:
tcp.send(str(time.time()).encode('utf-8'))
date = tcp.recv(buff_len)
if not date or date.decode('utf-8')=='exit':
break
print(date.decode('utf-8')) # 关闭socket
tcp.close()
打印log如下:
welcome
server 1563353572.051841
UDP示例
服务端 -- server_udp.py
#!/usr/bin/env python
#coding=utf-8 import time
import socket local_addr = ('127.0.0.1',8888)
buff_len = 1024 if __name__ == '__main__': # 创建一个socket
udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定监听的地址和端口
udp.bind(local_addr) while True: print('wating for message...')
# 阻塞接收客户端数据
data, addr = udp.recvfrom(buff_len)
print('received from %s data:%s' % (addr, data.decode('utf-8'))) time.sleep(1.5)
# 发送数据给客户端
udp.sendto(('server '+str(time.time())).encode('utf-8'), addr) # 关闭socket
udp.close()
打印log如下:
wating for message...
received from ('127.0.0.1', 51264) data:hello server.
wating for message...
received from ('127.0.0.1', 51264) data:1563353804.57
wating for message...
received from ('127.0.0.1', 51264) data:1563353806.07
客户端 -- client_udp.py
#!/usr/bin/env python
#coding=utf-8 import time
import socket server_addr = ('127.0.0.1',8888)
buff_len = 1024 if __name__ == '__main__': # 创建一个socket
udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # 发送数据给服务器
udp.sendto('hello server.'.encode('utf-8'), server_addr)
# 阻塞接收服务器数据
print(udp.recv(buff_len).decode('utf-8')) while True:
udp.sendto(str(time.time()).encode('utf-8'),server_addr)
print(udp.recv(buff_len).decode('utf-8')) # 关闭socket
udp.close()
打印log如下:
server 1563353804.56509
server 1563353806.0682404
如果udp连接不通或收发数据延迟,解决办法有2个:
1. 直接关闭防火墙
2. disable防火墙中阻止udp的策略规则,并允许python.exe通过防火墙



在windows上,若想让python隐藏窗口,可在程序启动后,插入如下代码:
import ctypes main_wnd = ctypes.windll.kernel32.GetConsoleWindow()
if main_wnd != 0:
ctypes.windll.user32.ShowWindow(main_wnd, 0)
ctypes.windll.kernel32.CloseHandle(main_wnd)
python前后台tcp/udp通讯示例的更多相关文章
- JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用
JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...
- python实现TCP/UDP通信
一.说明 对于TCP/udp的说明已经很多了,我在这里只是简单的说明一下 二.套接字scoket 套接字是一种具有之前所说的"通信端点"概念的计算网络数据结构.相当于电话插口,没它 ...
- 最简单的C#UDP通讯示例
参考:https://www.cnblogs.com/zxyc2000/articles/2846662.html 和 https://www.cnblogs.com/mq0036/p/7302605 ...
- TCP,UDP 通讯的helper类
使用Tcp通讯,首先要启动tcp服务端监听客户端,客户端发送消息,服务端收到消息 1.服务端代码如下 public class TcpServerTest { public async Task Be ...
- C#中的TCP通讯与UDP通讯
最近做了一个项目,主要是给Unity3D和实时数据库做通讯接口.虽然方案一直在变:从开始的UDP通讯变为TCP通讯,然后再变化为UDP通讯;然后通讯的对象又发生改变,由与数据库的驱动进行通讯(主动推送 ...
- LWIP裸机环境下实现TCP与UDP通讯
前面移植了LWIP,并且简单的实用了DHCP的功能,今天来使用一下实际的数据通讯的功能 首先是实现TCP客户端,我先上代码 #ifndef __TCP_CLIENT_H_ #define __TCP_ ...
- QQ--基于TCP/UDP协议的通讯原理
QQ是一个基于TCP/UDP协议的通讯软件 发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的! 一 ...
- LWIP裸机环境下实现TCP与UDP通讯(转)
源: LWIP裸机环境下实现TCP与UDP通讯
- java基础55 UDP通讯协议和TCP通讯协议
本文知识点(目录): 1.概述 2.UDP通讯协议 3.TCPP通讯协议 1.概述 1.在java中网络通讯作为Socket(插座)通讯,要求两台都必须安装socket. 2.不同的 ...
随机推荐
- HashMap的底层原理(jdk1.7.0_79)
前言 在Java中我们最常用的集合类毫无疑问就是Map,其中HashMap作为Map最重要的实现类在我们代码中出现的评率也是很高的. 我们对HashMap最常用的操作就是put和get了,那么你知道它 ...
- 图片与文本基础(html和css)
图片与文本基础 -----注释添加可以用/**/ 5.1图片 1.gif图片:最大颜色数256,保存时采用无损压缩 2.JPEG图片:可以包含1670万种颜色,保存时采用有损压缩,压缩率小的质量更高. ...
- golang两种在for循环中使用goroutine的错误形式
1. 闭包中使用循环体中变化的量 platground链接: https://play.golang.org/p/6x6_tuQNjUO type Value struct{ val int } fu ...
- Zabbix图表中文乱码(包含Docker安装乱码)
目录 Zabbix 4.0 版本 Zabbix 3.0 版本 Zabbix 4.0 Docker 版本 图表乱码问题解决 文章github 地址: 点我 最近在看 Zabbix 4.0 版本的官方文档 ...
- 【机器学习】PCA
目录 PCA 1. PCA最大可分性的思想 2. 基变换(线性变换) 3. 方差 4. 协方差 5. 协方差矩阵 6. 协方差矩阵对角化 7. PCA算法流程 8. PCA算法总结 PCA PCA 就 ...
- STP生成树理解
1.STP的功能 a. 防止二层环路 b .实现网络冗余备份 2.STP的选择机制 目的: 确定阻塞的端口 STP 交换机的角色: 根交换机,非根交换机 STP的选票: BPDU Ro ...
- jQuery 选择器有61种你都知道了多少
下面列举了61种jQuery 选择器 参考 选择器 语句 描述 * $("*") 选择所有元素 #id $("#lastname") id=“lastname” ...
- super与this用法
super注意点: 1.当super调用父类的构造方法,必须在构造方法的第一个: 2.super必须只能出现在子类的方法或者构造方法中: 3.super和this不能同时调用构造方法: 4.super ...
- jmeter压测学习6-HTTP Cookie管理器
前言 web网站的请求大部分都有cookies,jmeter的HTTP Cookie管理器可以很好的管理cookies. 我用的 jmeter5.1 版本,直接加一个HTTP Cookie管理器放到请 ...
- 登录-退出,在T分钟实现BC次用户登录退出,单次登录-退出%90用户时间t,需要的并发用户(线程)
聚合报告%90响应时间:%90用户响应时小于该值 2种理解方式: 一. 1s可完成的用户1/t: T分钟完成的用户T *(1/t); BC次用户需要的线程数Thread= BC/(T*(1/t)) = ...