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.不同的 ...
随机推荐
- SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去
SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去
- Lucene的全文检索学习
Lucene的官方网站(Apache的顶级项目):http://lucene.apache.org/ 1.什么是Lucene? Lucene 是 apache 软件基金会的一个子项目,由 Doug C ...
- [.NET] 控制只启动单个指定外部程序
独立观察员 2019 年 6 月 12 日 有的时候我们程序需要启动外部程序来配合实现某些功能,比如启动一个 Cef 相关程序来承载网页.那么如果那个外部程序并没有实现单例启动,我们程序去启动它的时候 ...
- C# 三元表达式
一.背景 因编程的基础差,因此最近开始巩固学习C#基础,后期把自己学习的东西,总结相应文章中,有不足处请大家多多指教. 二.语法 表达式1?表达式2:表达式3 描述: 表达式1一般为一个关系表达式. ...
- Ubuntu16.04的搭建l.2.t.p.d(宿舍访问公司内网)
主要的实现步骤 openswan(ipsec) : 提供一个密钥 ppp :提供用户名和密码 xl2tpd : 提供L2TP服务 sysctl : 提供服务器内部转发 iptables : 提供请求从 ...
- Qt固定窗口大小
指定大小 this->setMaximumSize(250, 250); 默认大小 this->setMaximumSize(this->width(), this->heig ...
- 010.[转] maven的三大生命周期
一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...
- MYSQL练习随笔
解法练习 案例1.子查询练习 字段 说明film_id 电影idtitle 电影名称description 电影描述信息category_id 电影分类idname 电影分类名称last_update ...
- [Linux]F5负载均衡器
F5负载均衡器是硬件的负载均衡设备 F5配置最简单负载均衡,需要配置的参数有Node(节点).Pool(资源池).和Virtual Server(虚拟服务器),它们的关系是,先配置Node,然后配置V ...
- Gitlab批量迁移项目
最近接到一个需求,要把一个Gitlab上边的项目全部导入到另外一个Gitlab,借鉴了网上的一个方法,成功实现. 参考链接:https://segmentfault.com/a/11900000159 ...