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.不同的 ...
随机推荐
- Django学习笔记(18)——BBS+Blog项目开发(2)主体思路及流程
这篇博客主要完成一个BBS+Blog项目,那么主要是模仿博客园的博客思路,使用Django框架进行练习. 准备:项目需求分析 在做一个项目的时候,我们首先做的就是谈清楚项目需求,功能需求,然后才开始写 ...
- Prometheus 监控K8S 资源状态对象
Prometheus 监控K8S 资源状态对象 官方文档:https://github.com/kubernetes/kube-state-metrics kube-state-metrics是一个简 ...
- C#刷遍Leetcode系列连载 索引
C#刷遍Leetcode系列文章 索引 索引(陆续发布中,请保持关注) C#刷遍Leetcode面试题系列连载(1) - 入门与工具简介 C#刷遍Leetcode面试题系列连载(2): No.38 - ...
- 我是如何一步步编码完成万仓网ERP系统的(一)系统架构
https://www.cnblogs.com/smh188/p/11533668.html(我是如何一步步编码完成万仓网ERP系统的(一)系统架构) https://www.cnblogs.com/ ...
- C 结构体、位域
参考链接:https://www.runoob.com/cprogramming/c-structures.html 结构体是干啥的 例如数组可以用来存储多个相同数据类型的数据项,结构体也是一种数据类 ...
- Maven环境搭配及继承
1. Maven简单介绍 Apache Maven是个项目管理和自动构建工具,基于项目对象模型(POM)的概念. 作用:完成项目的相关操作,如:编译,构建,单元测试,安装,网站生成和基于Maven部署 ...
- 代码方式给控件添加背景图片(WPF)
wpf中常常需要给控件添加背景图片,下边以wrapPanel为例,使用代码添加背景图片 WrapPanel xwraPanel = new WrapPanel(); ImageBrush ximgBr ...
- pid相关命令
pidof 查找正在运行进程的进程号(pid)的工具 pidof - find the process ID of a running program 参数: -s 表示只返回1个 pid -x 表示 ...
- 处理 JS中 undefined 的 7 个技巧
摘要: JS的大部分报错都是undefined... 作者:前端小智 原文:处理 JS中 undefined 的 7 个技巧 Fundebug经授权转载,版权归原作者所有. 大约8年前,当原作者开始学 ...
- 消息中间件Kafaka - PHP操作使用Kafka
Centos版本:Centos6.4,PHP版本:PHP7. 在上一篇文章中使用IP为192.168.9.154的机器安装并开启了Kafka进行了简单测试,充当了Kafka服务器. 本篇文章新开启一台 ...