如何从 UWP 中的 StreamSocketListener 获取数据?
How can get Data from StreamSocketListener in UWP?
我正在我的 UWP 应用程序中设置一个 StreamSocketListener 以接收来自 Windows 表单客户端的请求,此外,我希望在接收到带有 TCP 的特殊请求命令(此命令是字符串类型)之后我的 UWP 应用程序,它以 Byte[] 或字符串形式将一些数据发送回请求它的客户端。
我在 UWP 中的代码:
我这样写:
tcpListener = new StreamSocketListener();
tcpListener.Control.KeepAlive = false;
tcpListener.ConnectionReceived += TCPListener_ConnectionReceived;
并获取数据:
private async void TCPListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
try
{
string request;
using StreamReader streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead());
using StreamWriter streamWriter = new StreamWriter(args.Socket.OutputStream.AsStreamForWrite());
while (true)
{
request = await streamReader.ReadLineAsync();
if (!string.IsNullOrEmpty(request))
{
switch (request)
{
case "Command1":
//Do somthing i want
await streamWriter.WriteLineAsync("Done.");
await streamWriter.FlushAsync();
//When Job done I want send some data in string to Client
break;
case string stringRequest when stringRequest.StartsWith("Text"):
//Do somthing i want
await streamWriter.WriteLineAsync("Done.");
await streamWriter.FlushAsync();
//When Job done I want send some data in string to Client
break;
default:
break;
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
我想使用 TCPClient 在我的 WinForm 中发送的一些命令从 UWP 取回数据。
在我的 WinForm 应用程序中,我有:
using var tcpClient = new TcpClient ();
await tcpClient.ConnectAsync ("192.168.1.61", 1540);
using NetworkStream networkStream = tcpClient.GetStream ();
networkStream.ReadTimeout = 20000;
using StreamWriter streamWriter = new StreamWriter (networkStream);
using StreamReader streamReader = new StreamReader (networkStream, Encoding.UTF8);
streamWriter.AutoFlush = true;
await streamWriter.WriteLineAsync ("Command1");
byte[] bytes = new byte[tcpClient.SendBufferSize];
int recv = 0;
string received = string.Empty;
while (true) {
received += streamReader.ReadLine ();
if (received.EndsWith ("\n")) break;
}
Debug.WriteLine ($"Rec: {received}");
我可以正确连接并发送命令,但无法从服务器接收回数据
我的 UWP 是 Kiosk 应用程序,我需要从中获取一些数据
我认为这应该可行:
首先在 StreamSocketListener
ConnectionReceived
方法中做这样的事情:
private async void StreamSocketListener_ConnectionReceived (StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) {
try {
string request;
using StreamReader streamReader = new StreamReader (args.Socket.InputStream.AsStreamForRead ());
while (true) {
request = await streamReader.ReadLineAsync ();
switch (request) {
case "Command 1":
string screen = string.Empty;
try {
using DataWriter dataWriter = new DataWriter (args.Socket.OutputStream);
dataWriter.WriteString (scrennShotBase64); //or any you want like Byte
await dataWriter.StoreAsync ();
await dataWriter.FlushAsync ();
dataWriter.DetachStream ();
} catch (ArithmeticException ex) { Debug.WriteLine (ex); }
break;
case "Command 2":
// do some...
break;
default:
break;
}
}
} catch (Exception ex) {
Debug.WriteLine (ex.Message);
}
}
然后在你的 TCPClient
中做这样的事情:
try {
using TcpClient tcpClient = new TcpClient ();
tcpClient.ReceiveTimeout = 20000;
tcpClient.NoDelay = true;
tcpClient.ReceiveBufferSize = 20480000;
await tcpClient.ConnectAsync ("192.168.1.1", 1338);
using NetworkStream networkStream = tcpClient.GetStream ();
networkStream.ReadTimeout = 20000;
using StreamWriter streamWriter = new StreamWriter (networkStream);
using StreamReader streamReader = new StreamReader (networkStream, Encoding.UTF8);
streamWriter.AutoFlush = true;
await streamWriter.WriteLineAsync ("Command 1");
byte[] bytes = new byte[tcpClient.SendBufferSize];
int recv = 0;
string received = string.Empty;
if (networkStream.CanRead) {
StringBuilder CompleteMessage = new StringBuilder ();
byte[] bytesR = new byte[102400];
int numberOfBytesRead = 0;
do {
numberOfBytesRead = networkStream.Read (bytesR, 0, bytesR.Length);
CompleteMessage.AppendFormat ("{0}", Encoding.ASCII.GetString (bytesR, 0, numberOfBytesRead));
}
while (networkStream.DataAvailable);
} else {
Debug.WriteLine ("You cannot read data from this stream.");
tcpClient.Close ();
networkStream.Close ();
return;
}
networkStream.Close ();
} catch (Exception ex) {
Debug.WriteLine (ex);
}
有关详细信息,您可以在 Microsoft!
上查看此页面
我正在我的 UWP 应用程序中设置一个 StreamSocketListener 以接收来自 Windows 表单客户端的请求,此外,我希望在接收到带有 TCP 的特殊请求命令(此命令是字符串类型)之后我的 UWP 应用程序,它以 Byte[] 或字符串形式将一些数据发送回请求它的客户端。
我在 UWP 中的代码: 我这样写:
tcpListener = new StreamSocketListener();
tcpListener.Control.KeepAlive = false;
tcpListener.ConnectionReceived += TCPListener_ConnectionReceived;
并获取数据:
private async void TCPListener_ConnectionReceived(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
{
try
{
string request;
using StreamReader streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead());
using StreamWriter streamWriter = new StreamWriter(args.Socket.OutputStream.AsStreamForWrite());
while (true)
{
request = await streamReader.ReadLineAsync();
if (!string.IsNullOrEmpty(request))
{
switch (request)
{
case "Command1":
//Do somthing i want
await streamWriter.WriteLineAsync("Done.");
await streamWriter.FlushAsync();
//When Job done I want send some data in string to Client
break;
case string stringRequest when stringRequest.StartsWith("Text"):
//Do somthing i want
await streamWriter.WriteLineAsync("Done.");
await streamWriter.FlushAsync();
//When Job done I want send some data in string to Client
break;
default:
break;
}
}
}
}
catch (Exception ex)
{
Debug.WriteLine(ex.Message);
}
}
我想使用 TCPClient 在我的 WinForm 中发送的一些命令从 UWP 取回数据。 在我的 WinForm 应用程序中,我有:
using var tcpClient = new TcpClient ();
await tcpClient.ConnectAsync ("192.168.1.61", 1540);
using NetworkStream networkStream = tcpClient.GetStream ();
networkStream.ReadTimeout = 20000;
using StreamWriter streamWriter = new StreamWriter (networkStream);
using StreamReader streamReader = new StreamReader (networkStream, Encoding.UTF8);
streamWriter.AutoFlush = true;
await streamWriter.WriteLineAsync ("Command1");
byte[] bytes = new byte[tcpClient.SendBufferSize];
int recv = 0;
string received = string.Empty;
while (true) {
received += streamReader.ReadLine ();
if (received.EndsWith ("\n")) break;
}
Debug.WriteLine ($"Rec: {received}");
我可以正确连接并发送命令,但无法从服务器接收回数据 我的 UWP 是 Kiosk 应用程序,我需要从中获取一些数据
我认为这应该可行:
首先在 StreamSocketListener
ConnectionReceived
方法中做这样的事情:
private async void StreamSocketListener_ConnectionReceived (StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args) {
try {
string request;
using StreamReader streamReader = new StreamReader (args.Socket.InputStream.AsStreamForRead ());
while (true) {
request = await streamReader.ReadLineAsync ();
switch (request) {
case "Command 1":
string screen = string.Empty;
try {
using DataWriter dataWriter = new DataWriter (args.Socket.OutputStream);
dataWriter.WriteString (scrennShotBase64); //or any you want like Byte
await dataWriter.StoreAsync ();
await dataWriter.FlushAsync ();
dataWriter.DetachStream ();
} catch (ArithmeticException ex) { Debug.WriteLine (ex); }
break;
case "Command 2":
// do some...
break;
default:
break;
}
}
} catch (Exception ex) {
Debug.WriteLine (ex.Message);
}
}
然后在你的 TCPClient
中做这样的事情:
try {
using TcpClient tcpClient = new TcpClient ();
tcpClient.ReceiveTimeout = 20000;
tcpClient.NoDelay = true;
tcpClient.ReceiveBufferSize = 20480000;
await tcpClient.ConnectAsync ("192.168.1.1", 1338);
using NetworkStream networkStream = tcpClient.GetStream ();
networkStream.ReadTimeout = 20000;
using StreamWriter streamWriter = new StreamWriter (networkStream);
using StreamReader streamReader = new StreamReader (networkStream, Encoding.UTF8);
streamWriter.AutoFlush = true;
await streamWriter.WriteLineAsync ("Command 1");
byte[] bytes = new byte[tcpClient.SendBufferSize];
int recv = 0;
string received = string.Empty;
if (networkStream.CanRead) {
StringBuilder CompleteMessage = new StringBuilder ();
byte[] bytesR = new byte[102400];
int numberOfBytesRead = 0;
do {
numberOfBytesRead = networkStream.Read (bytesR, 0, bytesR.Length);
CompleteMessage.AppendFormat ("{0}", Encoding.ASCII.GetString (bytesR, 0, numberOfBytesRead));
}
while (networkStream.DataAvailable);
} else {
Debug.WriteLine ("You cannot read data from this stream.");
tcpClient.Close ();
networkStream.Close ();
return;
}
networkStream.Close ();
} catch (Exception ex) {
Debug.WriteLine (ex);
}
有关详细信息,您可以在 Microsoft!
上查看此页面