以下代码兼容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. CS224N Assignment1 Section 1

    运行环境需求 # All Import Statements Defined Here # Note: Do not add to this list. # All the dependencies ...

  2. ubuntu删除文件和文件夹的rm命令

    在Ubuntu中好多文件或文件夹是不能使用右键删除的,因此知道删除文件或文件夹的rm命令显得尤为重要. rm命令的语法 rm [选项] 文件名或文件夹名 rm命令的一些选项 -f.--force 强力 ...

  3. WPF数据模板(7)

    数据模板常用在3种类型的控件, 下图形式: 1.Grid这种列表表格中修改Cell的数据格式, CellTemplate可以修改单元格的展示数据的方式. 2.针对列表类型的控件, 例如树形控件,下拉列 ...

  4. django中视图函数中装饰器

    方法一 给指定方法加 from django.utils.decorators import method_decorator class xx(View): @method_decorator(装饰 ...

  5. python 对过时类或方法添加删除线的方法

    class Cat(Animal): def __init__(self): import warnings warnings.warn("Cat类带删除线了", Deprecat ...

  6. https://www.cnblogs.com/kxm87/p/9268622.html

    数据库使用MySQL,ORM使用spring data jpa 1 因此需要再pom.xml文件中添加相应jar包.如下: <!-- 引入jap --> <dependency> ...

  7. AutoresizingMask 的使用

    (1)先了解一下这几个枚举值的含义: (2)代码演说: 在viewcontroller 用代码创建一个红色的view,如下: UIView *redView = [[UIView alloc] ini ...

  8. Win2003下配置iis+php+mysql+zend

    所需软件: ActivePerl.PHP.MYSQL.Zend (一.安装IIS6.0;二.配置PHP环境;三.安装mysql;四.安装 Zend Optimizer;五.配置PHPMYADMIN) ...

  9. Python语言基础06-字符串和常用数据结构

    本文收录在Python从入门到精通系列文章系列 1. 使用字符串 第二次世界大战促使了现代电子计算机的诞生,最初计算机被应用于导弹弹道的计算,而在计算机诞生后的很多年时间里,计算机处理的信息基本上都是 ...

  10. spring-cloud-kubernetes服务发现之在k8s环境下开发spring cloud应用

    通常情况下,我们的线上的服务在迁移到k8s环境下的时候,都是采用平滑迁移的方案.服务治理与注册中心等都是采用原先的组件.比如spring cloud应用,在k8s环境下还是用原来的一套注册中心(如eu ...