Micropython ESP8266实现TCP/UDP功能

准备工作

连接wifi

import network as n
wlan =n.WLAN(n.STA_IF)
wlan.active(True)
wlan.disconnect() #先断开已有链接,以免重连出错
wlan.connect("SSID","PASSWORD")   #SSID和PASSWORD分别为WiFi名称和密码
wlan.ifconfig()

确保硬件ESP8266与电脑处于同一wifi下,通过wlan.ifconfig()获取wifi的ip地址,获取本机ip地址操作如下:
WIN+R打开运行
输入CMD,打开命令控制窗口
输入ipconfig,获取本机ip

UDP设置代码

#服务器

import socket
import network as n
import time
port = **** #服务器端口
SSID="*****" #WiFi名称
PASSWORD="*******" #WiFi密码
wlan=None
s=None
def connectWifi(ssid,passwd):
  global wlan
  wlan=n.WLAN(n.STA_IF)
  wlan.active(True)
  #关闭连接,确保没有任何连接,以免失败
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)
  return True
#用try的方法确保保持连接
try:
  if(connectWifi(SSID, PASSWORD) == True):
    #建立Socket连接
    s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #Socket属性
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    #获得IP地址
    ip=wlan.ifconfig()[0]
    print("UDP SERVER IP:", ip, ":", port)
    #绑定IP地址
s.bind((ip,port))

print('Waiting...')
    while True:
      data,addr=s.recvfrom(1024)
      print('Received:',data,'From',addr)
      s.sendto(data,addr)#原样发回
except:
  if (s):
    s.close()
  wlan.disconnect()
  wlan.active(False)

#客户端

import socket
import network as n
import time
host='******'  #服务器IP地址
port = **** #服务器端口
SSID="****" #WiFi名称
PASSWORD="*****" #WiFi密码
wlan=None
s=None
def connectWifi(ssid,passwd):
  global wlan
  wlan=n.WLAN(n.STA_IF)
  wlan.active(True)
  #关闭连接,确保没有任何连接,以免失败
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)
  return True
#用try的方法确保保持连接
try:
  if(connectWifi(SSID,PASSWORD) == True):
    #建立Socket连接
    s=socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
    #Socket属性
    s.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
    #向服务器发送数据
    print("UDP Connected to:", host, ":", port)
    while True:
      s.sendto(b'Hello,I am UDP Client\r\n',(host,port))
      time.sleep(1)
except:
  if (s):
    s.close()
  wlan.disconnect()
  wlan.active(False)

TCP连接

#服务器

import network as n
import socket
import time
SSID="****" #WiFi名
PASSWORD="********" #WiFi密码
port=**** #服务器端口
wlan=None
listenSocket=None
def connectWifi(ssid,passwd):
  global wlan
  wlan=n.WLAN(n.STA_IF)
  wlan.active(True)
  #关闭连接,确保没有任何连接,以免失败
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)
  return True
#用try的方法确保保持连接
try:
  connectWifi(SSID,PASSWORD)
  #获得IP地址
  ip=wlan.ifconfig()[0]
  #建立Socket连接
  listenSocket = socket.socket()
  #绑定IP地址
  listenSocket.bind((ip,port))
  print("TCP SERVER IP:",ip,":",port)
  #Socket属性
  listenSocket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  #侦听
  listenSocket.listen(1)
  print ('TCP waiting...')
  while True:
    print("Accepting.....")
    #获取客户端信息
    conn,addr = listenSocket.accept()
    print(addr,"Connected")
    while True:
      data = conn.recv(1024)
      if(len(data) == 0):
        print("Close socket") #无数据关闭Socket
        conn.close()
        break
      print(data)
      conn.send(data)  #原样发回
except:
  if(listenSocket):
    listenSocket.close()
  wlan.disconnect()
  wlan.active(False)

#客户端

import network as n
import socket
import time
SSID="****" #WiFi名
PASSWORD="******" #WiFi密码
host="*******" #服务器IP地址
port=***** #服务器端口
wlan=None
s=None
def connectWifi(ssid,passwd):
  global wlan
  wlan=n.WLAN(n.STA_IF)
  wlan.active(True)
  #关闭连接,确保没有任何连接,以免失败
  wlan.disconnect()
  wlan.connect(ssid,passwd)
  #确保WiFi连接成功
  while(wlan.ifconfig()[0]=='0.0.0.0'):
    time.sleep(1)
  return True
#用try的方法确保保持连接
try:
  connectWifi(SSID,PASSWORD)
  #建立socket连接
  s = socket.socket()
  #Socket属性
  s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
  #连接服务器
  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)
    ret=s.send(data)  #数据原样发回
except:
  if (s):
    s.close()
  wlan.disconnect()
  wlan.active(False)

你可能感兴趣的:(TCP/UDP)