基于Arduino的测试:
#include <ESP8266WiFi.h>
//以下三个定义为调试定义
#define DebugBegin(baud_rate) Serial.begin(baud_rate)
#define DebugPrintln(message) Serial.println(message)
#define DebugPrint(message) Serial.print(message)
#define AP_SSID "ESP12" //这里改成你的wifi名字
#define AP_PSW "12345678"//这里改成你的wifi密码
const uint16_t port = 5000;
const char * host = "192.168.4.10"; // ip or dns
WiFiClient client;//创建一个tcp client连接
void setup() {
//设置串口波特率,以便打印信息
DebugBegin(115200);
//延时5s 为了演示效果
delay(5000);
// 我不想别人连接我,只想做个站点
WiFi.mode(WIFI_STA);
WiFi.begin(AP_SSID,AP_PSW);
DebugPrint("Wait for WiFi... ");
//等待wifi连接成功
while (WiFi.status() != WL_CONNECTED) {
Serial.print("...");
delay(500);
}
DebugPrintln("");
DebugPrintln("WiFi connected");
DebugPrint("IP address: ");
DebugPrintln(WiFi.localIP());
delay(500);
DebugPrint("connecting to ");
DebugPrintln(host);
client.connect(host, port);
}
void loop() {
//connect - 启动tcp连接
/**
* 建立一个tcp连接
* @param host host of tcpserver (192.xx.xx.xx)
* @param port port of tcpserver
* @return result of tcp connect
* 1 --- success
* 0 --- fail
*/
int result=client.connect(host, port);
DebugPrintln(result);
DebugPrintln(client.connected());
DebugPrintln(client.status());
if (result==0) {
DebugPrintln("connection failed");
DebugPrintln("wait 5 sc...");
delay(5000);
}
else{
// 发送数据到Tcp server
DebugPrintln("Send this data to server");
//println - 发送数据到client连接的server
client.println(String("Send this data to server"));
//读取从server返回到响应数据
//readStringUntil - 读取响应数据直到某个字符串为止
String line = client.readStringUntil('\r');
DebugPrintln(line);
DebugPrintln("closing connection");
client.stop();
DebugPrintln("wait 3 sec...");
delay(3000);
}
}
今天碰到ESP8266作为tcp客户端连接tcpserve时报错client.status()=0;
傻傻的找了半天,原来是因为开启了防火墙。。。。难受。。。。关闭即可,同时要保证在同一网段中。
最后感谢单片机菜鸟的博客 https://blog.csdn.net/dpjcn1990/article/details/92830087