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()