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.不同的 ...
随机推荐
- 关于 NuGet 本地仓库、.NET Core 引用等实战
- 《 .NET内存宝典》阅读指南 - 第1章
先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.
- 【Python】运算符
python是强类型语言,某些场合下需要进行类型转换.关系运算符的结果是true或false.这里介绍一下基本的运算符,和几个使用实例,了解并掌握python中range()函数和math类库的引入和 ...
- webform的原生操作图片预览和上传
1.使用input标签进行图片操作,input的标签有一个accept属性,accept 属性只能与 <input type="file"> 配合使用.它规定能够通过文 ...
- 死磕Synchronized底层实现,面试你还怕什么?
关于synchronized的底层实现,网上有很多文章了.但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结.照搬而成,难免有些错误:要么很多点都是一笔带过,对于为什么这样实现没有一个说法, ...
- Java编程基础——数组和二维数组
Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...
- MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信
MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码 QQ:505645074 MQTT ...
- Python Scrapy在windows上的安装方法
如果想要学习爬虫,肯定会了解Scrapy,但安装Scrapy的方法相对于安装其他第三方库麻烦一点. 下面总结一下在我的电脑上安装Scrapy的方法,我的电脑是Windows10,32位操作系统.有如下 ...
- commons-dbutils【不推荐】
Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装. 一般项目开发过程中,要么选择 ORM框架,要么自己编写DBUtils类+数据库连接池就足够了.
- CornerNet: Detecting Objects as Paired Keypoints
CornerNet是一种anchor free的目标检测方法,不需要设置anchor,而是通过检测关键点(Keypoints),即目标的左上角(Top-Left Corners)和右下角(Bottom ...