2021-12-16 tcp通信 python

这个是ESP32上的TCP服务器写法,前面是用来联网的,后面是服务器监听


import time
import network
time.sleep(5) #防卡死延时
class wlan_ever(object):
    def __init__(self,name,password): #传入宽带账号,密码
        self.wlan_is_connect=0
        self.name = name
        self.password =password
    def threadRun1(self):  #联网,传入账号密码
        print('网络线程启动')
        wl=network.WLAN(network.STA_IF)
        wl.disconnect()
        wl.active(True)
        wl.disconnect()
        time.sleep(0.5)
        wl.connect(self.name,self.password)
        while 1:
            self.wlan_is_connect=wl.isconnected()
            if self.wlan_is_connect :
                print(wl.ifconfig())
                break
w= wlan_ever('300king','13704677369')
if w.wlan_is_connect:
    pass
else:
    w.threadRun1()

print('联网成功')





**************************************************************
import socket   #如果是PC机直接从这里开始用下面的就行
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #设定模式服务端
sock.bind(('',9889))                    #绑定本机ip  和端口
sock.listen(5)                          # 监听启动,队列5
dat=b''
while 1:                                #外层循环,接收连接
    print('准备接收')
    connection,address = sock.accept()  #没接收数据会阻塞在这里
      
    print ("Connect from:", address)    #有链接
    connection.settimeout(50)            #超时设定5秒  ,时间根据业务逻辑任意调节
    try:                              
        while 1:                        #内圈循环,用来持续接收数据
            data=connection.recv(10240)  #数据缓存池中的数据传入
            print(len(data))               
            dat=dat+data                #dat数据预先定义好二进制类型,持续接收数据
            if data.find(b'#1end1#')>-1:#发现结尾标志位就进入判断
                dat=dat[:-7]            #去掉标志位,其余数据存储
                print('end')
                break
        with open ('3333.jpg','wb') as f:
            f.write(dat)
        connection.send('ok'.encode('gbk'))          #返回数据,必须是二进制       
        dat=b''
        connection.close()              #关闭连接
    except :
        print('超时了')
        connection.close()


客户端的写法,也是ESP32 里边的所以有联网部分

import socket
import time
import network
time.sleep(5) #防卡死延时
class wlan_ever(object):
    def __init__(self,name,password): #传入宽带账号,密码
        self.wlan_is_connect=0
        self.name = name
        self.password =password
    def threadRun1(self):  #联网,传入账号密码
        print('网络线程启动')
        wl=network.WLAN(network.STA_IF)
        wl.active(True)
        wl.disconnect()
        time.sleep(0.5)
        wl.connect(self.name,self.password)
        while 1:
            self.wlan_is_connect=wl.isconnected()
            if self.wlan_is_connect :
                print(wl.ifconfig())
                break
w= wlan_ever('300king','13704677369')
if w.wlan_is_connect:
    pass
else:
    w.threadRun1()

print('联网成功')



************************************************************
import socket  #PC机使用这里开始到下面的内容
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 客户端模式
print('配置TCP')
s.connect(('192.168.3.190',9889))
print('连接服务器')
with open('3333.jpg','rb') as f: #获取发送的图片
    data=f.read()
send_data=data+b'#1end1#'     #在结尾增加结束标志位
s.sendall(send_data)             #发送数据,务必使用sendall
recvData=s.recv(1024)         #接收数据
print('接收到的数据为:', recvData) 
s.close() 


下面是8266,随便写一套

import time,json,network,machine
time.sleep(5)
from machine import WDT,Pin
p2=Pin(2,Pin.OUT,value=1)
def CreatNetwork(ssid,pwd):
    ap_if = network.WLAN(network.AP_IF)#AP 模式
    ap_if.active(True)
    ap_if.config(essid=ssid,password=pwd)
    return ap_if.ifconfig()[0]
addr=CreatNetwork('esp01sServer','1234567890')
print('联网成功:',addr)
p2.value(0)

import socket   #如果是PC机直接从这里开始用下面的就行
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  #设定模式服务端
sock.bind(('',9000))                    #绑定本机ip  和端口
sock.listen(5)                          # 监听启动,队列5
while 1:                                #外层循环,接收连接
    print('准备接收')
    connection,address = sock.accept()  #没接收数据会阻塞在这里
    print ("Connect from:", address)    #有链接
    connection.settimeout(50)            #超时设定5秒  ,时间根据业务逻辑任意调节
    try:                              
        while 1:                        #内圈循环,用来持续接收数据
            data=connection.recv(1024)  #数据缓存池中的数据传入
            print(data)
            connection.send(data)          #返回数据,必须是二进制
            if data.find(b'end') >-1 or data==b'':
                break
                
        
    except :
        print('超时了')
        connection.close()
    connection.close()              #关闭连接

import time,json,network,machine
time.sleep(5)
from machine import WDT,Pin
p2=Pin(2,Pin.OUT,value=1)
wl=network.WLAN(network.STA_IF)
wl.active(True)
wl.disconnect()
def lan_on_off(ssid,password):
  if wl.isconnected()==0:
    wl.active(False)
    time.sleep(1)
    wl.active(True)
    while wl.isconnected()==0 :
      wl.connect(ssid,password)
      time.sleep(20)
try:      
    lan_on_off('esp01sServer','1234567890')
except:
    machine.reset()
print('联网成功')
p2.value(0)

import socket  #PC机使用这里开始到下面的内容
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 客户端模式
print('配置TCP')
print(wl.ifconfig())
time.sleep(3)
s.connect(('192.168.4.1',9000))

print('连接服务器')
num=15
recvDataStar=b'0'
while 1:
    num=num+2
    s.sendall(b'%s'%str(num))             #发送数据,务必使用sendall
    recvData=s.recv(1024)        #接收数据
    time.sleep(10)
    print(num,recvData)
    if recvDataStar!=recvData:
        recvDataStar=recvData
    else:
        s.connect(('192.168.4.1',9000))
    if num<0:
        s.sendall(b'end')
        break
print('接收到的数据为:', recvData) 
s.close() 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值