UWP应用程序出现了一个奇怪的问题,我试图在创建套接字并从中读回数据时创建。这是基本情景:
_commandSocket = new StreamSocket();
await _commandSocket.ConnectAsync(new HostName("192.168.1.1"), "15740", SocketProtectionLevel.PlainSocket);
_commandOutput = _commandSocket.OutputStream;
_commandInput = _commandSocket.InputStream;
await _commandOutput.WriteAsync(initCommandBuffer);
var lengthBytes = new byte[4].AsBuffer();
await input.ReadAsync(lengthBytes, 4, InputStreamOptions.None);
etc..etc...etc...
我基本上打开一个套接字并向我的设备发送初始化命令。我的想法是,它首先以回复的方式向我发送回复的长度。
当我在桌面上调试/运行应用程序时,这一切都运行得很好,但是如果我尝试在我的Window 10移动设备(诺基亚930)上运行它,那么似乎没有读取单个字节(I'我试过读1个字节而不是4个字节。应用程序开发应该是“通用”。并且它完全在我的桌面上工作我不知道从哪里开始修复它。
打开移动设备上的连接有效,我在发送初始化命令时也没有收到任何错误,它只是在await ReadAsync命令上保持阻塞(好像什么也没有被发回)。
我对我连接的设备没有任何影响,但是因为这一切都在桌面上完美运行,设备并不知道谁在询问我很无能为力。
答案 0 :(得分:0)
无法确认我的答案,因为我只在模拟器上测试过,但我使用了流套接字监听器。
private async void StartServer()
{
int Port = 80;
try
{
//Bound to port 80
await listener.BindServiceNameAsync(Port.ToString());
}
catch (System.Runtime.InteropServices.COMException)
{
//Port 80 for communication is blocked.
}
listener.ConnectionReceived += async (s, e) =>
{
using (IInputStream input = e.Socket.InputStream)
{
var buffer = new Windows.Storage.Streams.Buffer(200);
await input.ReadAsync(buffer, buffer.Capacity, InputStreamOptions.Partial);
//reads incoming stream
string data = Encoding.ASCII.GetString(buffer.ToArray(), 0, (int) buffer.Length);
}
using (IOutputStream output = e.Socket.OutputStream)
{
using (Stream response = output.AsStreamForWrite())
{
response.Write(Encoding.ASCII.GetBytes("Response."), 0, 1);
}
}
};
}