Raspberry pi2台服务器没有响应
Raspberry pi 2 server does not respond
我已经用我的 raspberry pi 2 运行ning windows 10 IoT 启动了一个客户端服务器项目,这非常好,因为您可以 运行 在两者上使用相同的应用程序PC 和 RPI2。考虑到这一点,我只创建了一个既可以充当客户端又可以充当服务器的应用程序,然后我将其部署在两台设备上,并将其中一台用作服务器,另一台用作客户端。唯一的问题是服务器端永远不会回答客户端的连接调用。
我的代码如下:
服务器:
///servername is the port that I use
///hostadapter is an adapter helper obj that has a HostName property set to my Ip address.
public async void Start(string serverName, HostName hostAdapter)
{
//create the "server" object
serverListener = new StreamSocketListener();
serverListener.ConnectionReceived += ServerListener_ConnectionReceived;
try
{
await serverListener.BindEndpointAsync(hostAdapter, serverName);
Started = true;
}
catch (Exception ee)
{
Started = false;
myConsole.Print("error while starting server: " + ee.Message);
}
}
private async void ServerListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
myConsole.Print("connection recieved callback called");
DataReader reader = new DataReader(args.Socket.InputStream);
DataWriter ServerWriter = new DataWriter(args.Socket.OutputStream);
string ServerAnswer = "message recieved by server";
try
{
while (true)
{
// Read first 4 bytes (length of the subsequent string).
uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
if (sizeFieldCount != sizeof(uint))
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// Read the string.
uint stringLength = reader.ReadUInt32();
uint actualStringLength = await reader.LoadAsync(stringLength);
if (stringLength != actualStringLength)
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
ServerWriter.WriteUInt32(ServerWriter.MeasureString(ServerAnswer));
ServerWriter.WriteString(ServerAnswer);
await ServerWriter.StoreAsync();
}
}
catch (Exception exception)
{
myConsole.Print(exception.Message);
}
}
客户:
public async void Connect(string serverIP, string serverPort)
{
try
{
ServerHost = new HostName(serverIP);
}
catch (Exception ee)
{
return;
}
try
{
//open socket
ClientSocket = new StreamSocket();
await ClientSocket.ConnectAsync(ServerHost, serverPort);
Connected = true;
}
catch (Exception ex)
{
ClientSocket.Dispose();
ClientSocket = null;
myConsole.Print(ex.Message);
Connected = false;
}
}
非常感谢任何帮助。我下载了 wireshark 以便能够监控网络数据,我找到了客户端发送的 tcp [syn] 包,但我看不到任何 tcp [syn ack] 包。
原来我少了一个能力。您需要通过以太网通信的功能是
<Capabilities>
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<Capability Name="internetClientServer" />
</Capabilities>
我只添加了 privateNetworkClientServer 和 internetClient..
我已经用我的 raspberry pi 2 运行ning windows 10 IoT 启动了一个客户端服务器项目,这非常好,因为您可以 运行 在两者上使用相同的应用程序PC 和 RPI2。考虑到这一点,我只创建了一个既可以充当客户端又可以充当服务器的应用程序,然后我将其部署在两台设备上,并将其中一台用作服务器,另一台用作客户端。唯一的问题是服务器端永远不会回答客户端的连接调用。
我的代码如下:
服务器:
///servername is the port that I use
///hostadapter is an adapter helper obj that has a HostName property set to my Ip address.
public async void Start(string serverName, HostName hostAdapter)
{
//create the "server" object
serverListener = new StreamSocketListener();
serverListener.ConnectionReceived += ServerListener_ConnectionReceived;
try
{
await serverListener.BindEndpointAsync(hostAdapter, serverName);
Started = true;
}
catch (Exception ee)
{
Started = false;
myConsole.Print("error while starting server: " + ee.Message);
}
}
private async void ServerListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
myConsole.Print("connection recieved callback called");
DataReader reader = new DataReader(args.Socket.InputStream);
DataWriter ServerWriter = new DataWriter(args.Socket.OutputStream);
string ServerAnswer = "message recieved by server";
try
{
while (true)
{
// Read first 4 bytes (length of the subsequent string).
uint sizeFieldCount = await reader.LoadAsync(sizeof(uint));
if (sizeFieldCount != sizeof(uint))
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
// Read the string.
uint stringLength = reader.ReadUInt32();
uint actualStringLength = await reader.LoadAsync(stringLength);
if (stringLength != actualStringLength)
{
// The underlying socket was closed before we were able to read the whole data.
return;
}
ServerWriter.WriteUInt32(ServerWriter.MeasureString(ServerAnswer));
ServerWriter.WriteString(ServerAnswer);
await ServerWriter.StoreAsync();
}
}
catch (Exception exception)
{
myConsole.Print(exception.Message);
}
}
客户:
public async void Connect(string serverIP, string serverPort)
{
try
{
ServerHost = new HostName(serverIP);
}
catch (Exception ee)
{
return;
}
try
{
//open socket
ClientSocket = new StreamSocket();
await ClientSocket.ConnectAsync(ServerHost, serverPort);
Connected = true;
}
catch (Exception ex)
{
ClientSocket.Dispose();
ClientSocket = null;
myConsole.Print(ex.Message);
Connected = false;
}
}
非常感谢任何帮助。我下载了 wireshark 以便能够监控网络数据,我找到了客户端发送的 tcp [syn] 包,但我看不到任何 tcp [syn ack] 包。
原来我少了一个能力。您需要通过以太网通信的功能是
<Capabilities>
<Capability Name="internetClient" />
<Capability Name="privateNetworkClientServer" />
<Capability Name="internetClientServer" />
</Capabilities>
我只添加了 privateNetworkClientServer 和 internetClient..