以下代码兼容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通讯示例的更多相关文章

  1. JAVA之旅(三十二)——JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用

    JAVA之旅(三十二)--JAVA网络请求,IP地址,TCP/UDP通讯协议概述,Socket,UDP传输,多线程UDP聊天应用 GUI写到一半电脑系统挂了,也就算了,最多GUI还有一个提示框和实例, ...

  2. python实现TCP/UDP通信

    一.说明 对于TCP/udp的说明已经很多了,我在这里只是简单的说明一下 二.套接字scoket 套接字是一种具有之前所说的"通信端点"概念的计算网络数据结构.相当于电话插口,没它 ...

  3. 最简单的C#UDP通讯示例

    参考:https://www.cnblogs.com/zxyc2000/articles/2846662.html 和 https://www.cnblogs.com/mq0036/p/7302605 ...

  4. TCP,UDP 通讯的helper类

    使用Tcp通讯,首先要启动tcp服务端监听客户端,客户端发送消息,服务端收到消息 1.服务端代码如下 public class TcpServerTest { public async Task Be ...

  5. C#中的TCP通讯与UDP通讯

    最近做了一个项目,主要是给Unity3D和实时数据库做通讯接口.虽然方案一直在变:从开始的UDP通讯变为TCP通讯,然后再变化为UDP通讯;然后通讯的对象又发生改变,由与数据库的驱动进行通讯(主动推送 ...

  6. LWIP裸机环境下实现TCP与UDP通讯

    前面移植了LWIP,并且简单的实用了DHCP的功能,今天来使用一下实际的数据通讯的功能 首先是实现TCP客户端,我先上代码 #ifndef __TCP_CLIENT_H_ #define __TCP_ ...

  7. QQ--基于TCP/UDP协议的通讯原理

    QQ是一个基于TCP/UDP协议的通讯软件  发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服 务器,只不过不是常用的那些,那个服务器是腾讯自行开发的!   一 ...

  8. LWIP裸机环境下实现TCP与UDP通讯(转)

    源: LWIP裸机环境下实现TCP与UDP通讯

  9. java基础55 UDP通讯协议和TCP通讯协议

    本文知识点(目录): 1.概述    2.UDP通讯协议    3.TCPP通讯协议 1.概述 1.在java中网络通讯作为Socket(插座)通讯,要求两台都必须安装socket.    2.不同的 ...

随机推荐

  1. SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去

    SampleDateFormat 高并发下导致 线程 Blocked 从而导致 Tomcat 吞吐一直上不去

  2. Lucene的全文检索学习

    Lucene的官方网站(Apache的顶级项目):http://lucene.apache.org/ 1.什么是Lucene? Lucene 是 apache 软件基金会的一个子项目,由 Doug C ...

  3. [.NET] 控制只启动单个指定外部程序

    独立观察员 2019 年 6 月 12 日 有的时候我们程序需要启动外部程序来配合实现某些功能,比如启动一个 Cef 相关程序来承载网页.那么如果那个外部程序并没有实现单例启动,我们程序去启动它的时候 ...

  4. C# 三元表达式

    一.背景 因编程的基础差,因此最近开始巩固学习C#基础,后期把自己学习的东西,总结相应文章中,有不足处请大家多多指教. 二.语法 表达式1?表达式2:表达式3 描述: 表达式1一般为一个关系表达式. ...

  5. Ubuntu16.04的搭建l.2.t.p.d(宿舍访问公司内网)

    主要的实现步骤 openswan(ipsec) : 提供一个密钥 ppp :提供用户名和密码 xl2tpd : 提供L2TP服务 sysctl : 提供服务器内部转发 iptables : 提供请求从 ...

  6. Qt固定窗口大小

    指定大小 this->setMaximumSize(250, 250); 默认大小 this->setMaximumSize(this->width(), this->heig ...

  7. 010.[转] maven的三大生命周期

    一.Maven的生命周期 Maven的生命周期就是对所有的构建过程进行抽象和统一.包含了项目的清理.初始化.编译.测试.打包.集成测试.验证.部署和站点生成等几乎所有的构建步骤. Maven的生命周期 ...

  8. MYSQL练习随笔

    解法练习 案例1.子查询练习 字段 说明film_id 电影idtitle 电影名称description 电影描述信息category_id 电影分类idname 电影分类名称last_update ...

  9. [Linux]F5负载均衡器

    F5负载均衡器是硬件的负载均衡设备 F5配置最简单负载均衡,需要配置的参数有Node(节点).Pool(资源池).和Virtual Server(虚拟服务器),它们的关系是,先配置Node,然后配置V ...

  10. Gitlab批量迁移项目

    最近接到一个需求,要把一个Gitlab上边的项目全部导入到另外一个Gitlab,借鉴了网上的一个方法,成功实现. 参考链接:https://segmentfault.com/a/11900000159 ...