UDP/TCP的Python代码

1.UDP,端口9090,本机IP测试。UDP一般不分服务器或者客户端,测试工具可用通信猫,不仅可用来调试UDP、TCP等,也可用作串口调试助手。

comnet_bin_v313通讯猫工具_comnet_bin资源-CSDN文库

import socket
ip="127.0.0.1" #服务器IP
port = 9090 #服务器端口
s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #连接Socket
s.bind((ip,port)) 
while True:
    data,addr=s.recvfrom(1024)
    s.sendto(data,addr)#原样发回
    print("IP is %s,Port is %r,Data is %s"%(ip,port,data.decode('gb2312'))) #打印信息,支持中文
s.close()

2.TCP一般要区分服务器端和客户端,以下为TCP客户端,此时需要服务器(127.0.0.1)端提供服务。

import socket
host="127.0.0.1" #服务器IP地址
port=8080 #服务器端口
s=None
#用try的方法确保保持连接
try:
  #建立socket连接
  s = socket.socket()
  #连接服务器
  s.connect((host,port))
  #打印信息
  print("TCP Connected to:", host, ":", port)
  while True:
    data = s.recv(1024)
    if(len(data) == 0):   #无数据关闭Socket
      print("Close socket")
      s.close()
      break
    print(data.decode('gb2312')) #打印,支持中文
    ret=s.send(data)  #数据原样发回
except:
  if (s):
    s.close()

TCP服务器端代码:

import socket
ip="127.0.0.1" #服务器地址
port =7070 #服务器端口
#用try的方法确保保持连接
try:
    s=socket.socket(socket.AF_INET, socket.SOCK_STREAM) #建立Socket连接
    print('TCP SERVER IP:', ip, ':', port)
    s.bind((ip,port))#绑定IP地址
    s.listen(1)   #侦听
    print('TCP Waiting...')
    while True:
      conn,addr=s.accept()
      print(addr,'TCP Connected')
      while True:
        data=conn.recv(1024)
        if(len(data)==0):
          conn.close()
          s.close()
          print('Close TCP') #关闭TCP
          break 
        conn.send(data)#原样发回
        print('Data:',data.decode('gb2312'),'From',addr) #打印信息,支持中文
except:
  if (s):
    s.close()

3.UDP-TCP转发,即UDP接收到数据后,再以TCP的方式进行转发。以下代码功能为单向的,即UDP往TCP方向转发,且没有提供TCP的重连机制。测试时需要开启UDP、TCP两个测试窗口,UDP发送数据,TCP可以获取UDP发送的数据。

import socket
ip="127.0.0.1" #服务器地址
tcp_port =7070 #TCP服务器端口
udp_port =9090 #UDP服务器端口
#用try的方法确保保持连接
try:
    tcp_s=socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #建立TCP Socket连接
    tcp_s.bind((ip,tcp_port)) #TCP绑定IP地址
    print('TCP:',ip,':',tcp_port) #打印TCP信息
    tcp_s.listen(1)   #TCP侦听
    udp_s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM) #UDP连接Socket
    udp_s.bind((ip,udp_port))    #UDP绑定IP地址
    print('UDP:',ip,':',udp_port) #打印UDP信息
    while True:
      conn,tcp_addr=tcp_s.accept() #TCP连接
      print(tcp_addr,'TCP Connected')
      while True:
        data,udp_addr=udp_s.recvfrom(1024) #UDP连接  
        conn.send(data)#TCP发回UDP数据
        print('Data:',data.decode('gb2312'),'From UDP',udp_addr,'by TCP',tcp_addr)#打印信息,支持中文
except:
  if (tcp_s):
    tcp_s.close()
  if (udp_s):
    udp_s.close()

猜你喜欢

转载自blog.csdn.net/weixin_41784968/article/details/129624855