以下代码兼容python2.7+、python3

TCP示例

服务器 -- sever_tcp.py

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import socket
  6. import threading
  7.  
  8. local_addr = ('127.0.0.1',8888)
  9. buff_len = 1024
  10.  
  11. def conn_proc(sock, addr):
  12.  
  13. print('accept new connection from %s:%s...' % addr)
  14. # 发送数据给客户端
  15. sock.send('welcome'.encode('utf-8'))
  16.  
  17. while True:
  18.  
  19. print('wating for message...')
  20. # 阻塞接收客户端数据
  21. date = sock.recv(buff_len)
  22. if not date or date.decode('utf-8')=='exit':
  23. break
  24. print(date.decode('utf-8'))
  25.  
  26. time.sleep(1.5)
  27. sock.send(('server '+str(time.time())).encode('utf-8'))
  28.  
  29. sock.close()
  30. print('close connection %s:%s' % addr)
  31.  
  32. if __name__ == '__main__':
  33.  
  34. # 创建一个socket
  35. tcp = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  36. # 绑定监听的地址和端口
  37. tcp.bind(local_addr)
  38. # 开始监听端口,等待连接的最大数量为10
  39. tcp.listen(10)
  40.  
  41. while True:
  42. # 阻塞等待客户端过来的tcp连接
  43. sock,addr = tcp.accept()
  44. # 创建一个新线程来处理TCP连接
  45. threading.Thread(target=conn_proc,args=(sock,addr)).start()
  46.  
  47. # 关闭socket
  48. 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

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import socket
  6.  
  7. server_addr = ('127.0.0.1',8888)
  8. buff_len = 1024
  9.  
  10. if __name__ == '__main__':
  11.  
  12. # 创建一个socket
  13. tcp = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
  14. # 建立连接
  15. tcp.connect(server_addr)
  16.  
  17. # 发送数据给服务器
  18. tcp.send('hello server.'.encode('utf-8'))
  19. # 阻塞接收服务器数据
  20. print(tcp.recv(buff_len).decode('utf-8'))
  21.  
  22. while True:
  23. tcp.send(str(time.time()).encode('utf-8'))
  24. date = tcp.recv(buff_len)
  25. if not date or date.decode('utf-8')=='exit':
  26. break
  27. print(date.decode('utf-8'))
  28.  
  29. # 关闭socket
  30. tcp.close()

打印log如下:

welcome
server 1563353572.051841

UDP示例

服务端  -- server_udp.py

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import socket
  6.  
  7. local_addr = ('127.0.0.1',8888)
  8. buff_len = 1024
  9.  
  10. if __name__ == '__main__':
  11.  
  12. # 创建一个socket
  13. udp = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  14. # 绑定监听的地址和端口
  15. udp.bind(local_addr)
  16.  
  17. while True:
  18.  
  19. print('wating for message...')
  20. # 阻塞接收客户端数据
  21. data, addr = udp.recvfrom(buff_len)
  22. print('received from %s data:%s' % (addr, data.decode('utf-8')))
  23.  
  24. time.sleep(1.5)
  25. # 发送数据给客户端
  26. udp.sendto(('server '+str(time.time())).encode('utf-8'), addr)
  27.  
  28. # 关闭socket
  29. 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

  1. #!/usr/bin/env python
  2. #coding=utf-8
  3.  
  4. import time
  5. import socket
  6.  
  7. server_addr = ('127.0.0.1',8888)
  8. buff_len = 1024
  9.  
  10. if __name__ == '__main__':
  11.  
  12. # 创建一个socket
  13. udp = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
  14.  
  15. # 发送数据给服务器
  16. udp.sendto('hello server.'.encode('utf-8'), server_addr)
  17. # 阻塞接收服务器数据
  18. print(udp.recv(buff_len).decode('utf-8'))
  19.  
  20. while True:
  21. udp.sendto(str(time.time()).encode('utf-8'),server_addr)
  22. print(udp.recv(buff_len).decode('utf-8'))
  23.  
  24. # 关闭socket
  25. udp.close()

打印log如下:

server 1563353804.56509
server 1563353806.0682404

如果udp连接不通或收发数据延迟,解决办法有2个:

1. 直接关闭防火墙

2. disable防火墙中阻止udp的策略规则,并允许python.exe通过防火墙

在windows上,若想让python隐藏窗口,可在程序启动后,插入如下代码:

  1. import ctypes
  2.  
  3. main_wnd = ctypes.windll.kernel32.GetConsoleWindow()
  4. if main_wnd != 0:
  5. ctypes.windll.user32.ShowWindow(main_wnd, 0)
  6. 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. 关于 NuGet 本地仓库、.NET Core 引用等实战

  2. 《 .NET内存宝典》阅读指南 - 第1章

    先发表生成URL以印在书里面.等书籍正式出版销售后会公开内容.

  3. 【Python】运算符

    python是强类型语言,某些场合下需要进行类型转换.关系运算符的结果是true或false.这里介绍一下基本的运算符,和几个使用实例,了解并掌握python中range()函数和math类库的引入和 ...

  4. webform的原生操作图片预览和上传

    1.使用input标签进行图片操作,input的标签有一个accept属性,accept 属性只能与 <input type="file"> 配合使用.它规定能够通过文 ...

  5. 死磕Synchronized底层实现,面试你还怕什么?

    关于synchronized的底层实现,网上有很多文章了.但是很多文章要么作者根本没看代码,仅仅是根据网上其他文章总结.照搬而成,难免有些错误:要么很多点都是一笔带过,对于为什么这样实现没有一个说法, ...

  6. Java编程基础——数组和二维数组

    Java编程基础——数组和二维数组 摘要:本文主要对数组和二维数组进行简要介绍. 数组 定义 数组可以理解成保存一组数的容器,而变量可以理解为保存一个数的容器. 数组是一种引用类型,用于保存一组相同类 ...

  7. MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信

    MQTT实战1 - 使用Apache Apollo代理服务器实现mqtt通信 MQTT实战2 - 使用MQTTnet实现mqtt通信 源码下载 -> 提取码  QQ:505645074 MQTT ...

  8. Python Scrapy在windows上的安装方法

    如果想要学习爬虫,肯定会了解Scrapy,但安装Scrapy的方法相对于安装其他第三方库麻烦一点. 下面总结一下在我的电脑上安装Scrapy的方法,我的电脑是Windows10,32位操作系统.有如下 ...

  9. commons-dbutils【不推荐】

    Apache 组织提供的一个开源 JDBC工具类库,它是对JDBC的简单封装. 一般项目开发过程中,要么选择 ORM框架,要么自己编写DBUtils类+数据库连接池就足够了.

  10. CornerNet: Detecting Objects as Paired Keypoints

    CornerNet是一种anchor free的目标检测方法,不需要设置anchor,而是通过检测关键点(Keypoints),即目标的左上角(Top-Left Corners)和右下角(Bottom ...