Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与UWP应用程序的网络连接_C#_Sockets_Networking_Win Universal App_Windows 10 Iot Core - Fatal编程技术网

C# 与UWP应用程序的网络连接

C# 与UWP应用程序的网络连接,c#,sockets,networking,win-universal-app,windows-10-iot-core,C#,Sockets,Networking,Win Universal App,Windows 10 Iot Core,我有两个Windows UWP应用程序。其中一个(服务器)在Windows IoT(10586.0)上的Raspberry Pi 2上运行。另一个(客户端)在同一网络中的任何Windows 10设备上运行 我想要的是让应用程序彼此“对话”。目前,我只想将简单字符串从客户端发送到服务器。以后,序列化数据应该通过网络传输 这是服务器应用程序的代码: namespace LCARSHomeAutomation { /// <summary> /// Eine leere Seite, di

我有两个Windows UWP应用程序。其中一个(服务器)在Windows IoT(10586.0)上的Raspberry Pi 2上运行。另一个(客户端)在同一网络中的任何Windows 10设备上运行

我想要的是让应用程序彼此“对话”。目前,我只想将简单字符串从客户端发送到服务器。以后,序列化数据应该通过网络传输

这是服务器应用程序的代码:

namespace LCARSHomeAutomation
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

        try {
            EstablishNetworking();
            txb_Events.Text += "Server Running";
        }catch (Exception ex)
        {
            txb_Events.Text += ex.Message;
        }

        
    }

    private async void EstablishNetworking()
    {
        await StartListener();
    }

    public async Task StartListener()
    {
        StreamSocketListener listener = new StreamSocketListener();
        listener.ConnectionReceived += OnConnection;

        listener.Control.KeepAlive = true;

        try
        {
            await listener.BindServiceNameAsync("5463");
            
        }
        catch (Exception ex)
        {
            if (SocketError.GetStatus(ex.HResult) == SocketErrorStatus.Unknown)
            {
                throw;
            }
            //Logs.Add(ex.Message);
            txb_Events.Text += ex.Message;
        }

    }

    private async void OnConnection(StreamSocketListener sender, StreamSocketListenerConnectionReceivedEventArgs args)
    {
        Stream inStream = args.Socket.InputStream.AsStreamForRead();
        StreamReader reader = new StreamReader(inStream);
        string request = await reader.ReadLineAsync();

        await Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                   () =>
                                   {
                                        // Your UI update code goes here!
                                        txb_Events.Text += (String)request;
                                   });


    }

    private async Task ConnectSocket()
    {
        StreamSocket socket = new StreamSocket();

        socket.Control.KeepAlive = false;

        HostName host = new HostName("localhost");

        try
        {
            await socket.ConnectAsync(host, "5463");

            Stream streamOut = socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(streamOut);
            string request = "Test Self App \n";
            await writer.WriteLineAsync(request);
            await writer.FlushAsync();

            socket.Dispose();
        }
        catch (Exception ex)
        {
            txb_Events.Text += ex.Message;
            //Logs.Add(ex.Message)
        }


    }

    private async void btn_Send_Click(object sender, RoutedEventArgs e)
    {
        await ConnectSocket();
    }
    
}
}
名称空间LCARSHomeAutomation
{
/// 
///在这段时间里,我们的内心世界充满了希望。
/// 
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
试一试{
建立网络();
txb_Events.Text+=“服务器正在运行”;
}捕获(例外情况除外)
{
txb_Events.Text+=ex.消息;
}
}
专用异步网络()
{
等待惊吓者();
}
公共异步任务侦听器()
{
StreamSocketListener listener=新的StreamSocketListener();
listener.ConnectionReceived+=OnConnection;
listener.Control.KeepAlive=true;
尝试
{
等待listener.BindServiceNameAsync(“5463”);
}
捕获(例外情况除外)
{
if(SocketError.GetStatus(ex.HResult)==SocketErrorStatus.Unknown)
{
投掷;
}
//日志。添加(例如消息);
txb_Events.Text+=ex.消息;
}
}
连接上的专用异步无效(StreamSocketListener发送方、StreamSocketListenerConnectionReceivedEventArgs参数)
{
Stream inStream=args.Socket.InputStream.AsStreamForRead();
StreamReader=新的StreamReader(流内);
string request=wait reader.readlinesync();
等待Windows.ApplicationModel.Core.CoreApplication.MainView.CoreWindow.Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
() =>
{
//你的UI更新代码在这里!
txb_Events.Text+=(字符串)请求;
});
}
专用异步任务ConnectSocket()
{
StreamSocket套接字=新的StreamSocket();
socket.Control.KeepAlive=false;
主机名主机=新主机名(“本地主机”);
尝试
{
等待socket.ConnectAsync(主机,“5463”);
streamOut=socket.OutputStream.AsStreamForWrite();
StreamWriter writer=新StreamWriter(streamOut);
string request=“测试自我应用程序\n”;
等待writer.WriteLineAsync(请求);
等待writer.FlushAsync();
socket.Dispose();
}
捕获(例外情况除外)
{
txb_Events.Text+=ex.消息;
//添加日志(例如消息)
}
}
私有异步无效btn\u发送\u单击(对象发送方,路由目标)
{
等待ConnectSocket();
}
}
}
如您所见,我正在同一主机上与同一应用程序建立网络连接,并发送字符串“Test Self app”。这在相当长的一段时间内运行良好,但过了一段时间后,我发现错误:

引发异常:mscorlib.ni.dll中的“System.Runtime.InteropServices.COMException”

WinRT信息:无法建立连接,因为目标计算机主动拒绝连接

所以,这是我的第一个问题:这个错误是什么?我如何修复它

另一件事是:我无法在服务器和客户端之间建立网络连接。我不知道,我做错了什么。这是“客户机”的代码:

命名空间lcarsmote
{
/// 
///在这段时间里,我们的内心世界充满了希望。
/// 
公共密封部分类主页面:第页
{
公共主页()
{
this.InitializeComponent();
}
私有异步无效btn\u发送\u单击(对象发送方,路由目标)
{
StreamSocket套接字=新的StreamSocket();
HostName host=new HostName(“localhost”);//在RPi上运行时替换为coorrect HostName
尝试
{
试一试{
等待socket.ConnectAsync(主机,“5463”);
}
捕获(例外情况除外)
{
txb_Events.Text+=ex.消息;
}
streamOut=socket.OutputStream.AsStreamForWrite();
StreamWriter writer=新StreamWriter(streamOut);
string request=“远程应用程序测试”;
等待writer.WriteLineAsync(请求);
等待writer.FlushAsync();
socket.Dispose();
}
捕获(例外情况除外)
{
txb_Events.Text+=ex.消息;
//添加日志(例如消息)
}
}
}
}
当我点击btn_发送时,我会收到错误消息

由于连接方在一段时间后没有正确响应,连接尝试失败;或者由于连接的主机未能响应,建立的连接失败

在意外时间调用了一个方法。(HRESULT的例外:0x800000E)

我做错了什么?也许我应该说,我在编程网络连接、套接字等方面相对较新


谢谢你的帮助

您应该尝试在UWP中使用
StreamSocket
API。此示例repo包含服务器和客户端代码:

在意外时间调用了一个方法。(HRESULT的例外:0x800000E)


这个错误发生在我尝试连续两次调用
ConnectAsync
时,我认为您可以检查您的逻辑或调试以确认您的情况。

根据您所谈论的数据量和最终用例,Amazon的AWS物联网平台可能会有所不同
namespace LCARSRemote
{
/// <summary>
/// Eine leere Seite, die eigenständig verwendet oder zu der innerhalb eines Rahmens navigiert werden kann.
/// </summary>
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    private async void btn_Send_Click(object sender, RoutedEventArgs e)
    {
        StreamSocket socket = new StreamSocket();

        HostName host = new HostName("localhost"); //Replace with coorect hostname when running on RPi

        try
        {
            try {
                await socket.ConnectAsync(host, "5463");
            }
            catch(Exception ex)
            {
                txb_Events.Text += ex.Message;
            }

            Stream streamOut = socket.OutputStream.AsStreamForWrite();
            StreamWriter writer = new StreamWriter(streamOut);
            string request = "Remote App Test";
            await writer.WriteLineAsync(request);
            await writer.FlushAsync();

            socket.Dispose();

        }
        catch (Exception ex)
        {
            txb_Events.Text += ex.Message;
            //Logs.Add(ex.Message)
        }

    }
}
}
checknetisolation loopbackexempt -d -n= {package family} 
https://ms-iot.github.io/content/en-US/win10/samples/NodejsWU.htm
RestUP  https://github.com/tomkuijsten/restup