我现在正尝试使用ESP8266(在STA模式下)将STM32F429连接到C#桌面应用程序。我希望ESP8266作为客户端,而C#作为服务器。但是ESP8266仍然无法在同一LAN中找到我的PC。
现在我已经成功使用AT命令将ESP8266连接到我的Router AP。然后我使用XAMPP在地址为192.168.1.11:80的PC上打开一个门,然后使用以下命令(AT + CIPSTART = \“ TCP \”,\“ 192.168.1.11 \”,80“)成功连接ESP8266(返回OK到我的STM32F429)。 然后,我想用我的C#代码替换XAMPP,以打开TCP服务器。但是我做不到!
关于C#代码,我已经成功建立了两个C#程序之间的连接(IP地址为192.168.1.11:80,与上面提到的相同),但是当我尝试使用ESP8266时连接到相同的IP和端口,则失败。
我怀疑在LAN的某些端口上打开TCP侦听器时可能会有一些错误的概念...我不知道...
以下是我的C#代码。 (STM32的代码只是基本的Usart代码,我在这里不再介绍。)
// Code for Server
namespace Tcp_Server
{
public partial class Form1 : Form
{
private TcpListener myListener;
private TcpClient newClient;
public BinaryReader br;
public BinaryWriter bw;
public Form1()
{
InitializeComponent();
Thread myThread = new Thread(ServerA);
myThread.Start();
}
private void ServerA()
{
IPAddress SvrIP = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address); // Get the virtual IP of my PC.
this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, ip.ToString() });
myListener = new TcpListener(ip, 80); //construct a Tcp Listener.
myListener.Start(); //Tcp Listener start
newClient = myListener.AcceptTcpClient();// Searching for a client...
this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, "Connect Successfully" });
while (true)
{
try
{
NetworkStream clientStream = newClient.GetStream();
br = new BinaryReader(clientStream);
string receive = null;
receive = br.ReadString();//读取
this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, receive });
}
catch
{
MessageBox.Show("Receving failed...");
}
}
}
// Code for client
namespace Client
{
public partial class Form1 : Form
{
private TcpClient client;
public BinaryReader br;
public BinaryWriter bw;
public Form1()
{
InitializeComponent();
Thread myThread = new Thread(ClientA);
myThread.Start();
}
private void ClientA()
{
IPAddress ip = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address); // Get the virtual IP of my PC.
client = new TcpClient(ip.ToString(), 80);
this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, "Connect to Server Successfully!" });
while (true)
{
try
{
NetworkStream clientStream = client.GetStream();
br = new BinaryReader(clientStream);
string receive = null;
receive = br.ReadString();
}
catch
{
MessageBox.Show("Receving failed...");
}
}
}
private void AddToTextbox(TextBox txt, String s)
{
txt.Text += s;
}
private delegate void AddToTextbox_dg(TextBox txt, String s);
private void btn_send_Click(object sender, EventArgs e)
{
NetworkStream clientStream = client.GetStream();
bw = new BinaryWriter(clientStream);
bw.Write(message.Text);
}
}
}
有人可以帮我解决这个问题吗?
我的电脑在收到命令时做了什么: myListener = new TcpListener(ip,80);
我正在做的项目是通过ESP8266将Stm32F429和OV7725获得的图像数据传输到PC。我知道Usart这样做太慢了,但是现在我只是在尝试建立连接。你们有什么建议可以给我吗?
答案 0 :(得分:0)
首先,请确保您的PC上没有其他应用程序在监听端口80。如果是,则必须对其进行更改。
第二,尝试将TCPListener的IP设置为本地主机“ 127.0.0.1”。通过连接到PC的IP,您将可以访问此服务器。
答案 1 :(得分:0)
我已经在命令窗口中检查了使用的IP,如下所示:
Command Window for checking IP usage
我仍然保持ESP8266尝试访问的IP地址为192.168.1.11:1900,这是我的PC在LAN中的虚拟IP,如下所示:
并更改IP C#会尝试在以下位置创建TCPListener:
这是您的意思吗?谢谢。