首页 > 解决方案 > 在 Winodws Universal App (Javascript) 和客户端 Android 中创建服务器 TCP

问题描述

我想在 c# 中创建一个 tcp 服务器并在基于通用应用程序 javascript 的项目中使用它,并创建以下代码(服务器):

//C# Windows Runtime Component

public sealed class Server
    {
        public Server()
        {
            Debug.WriteLine("Server...");
        }

        public async void Connection()
        {
            IPAddress ip = IPAddress.Parse("192.168.0.10");
            TcpListener server = new TcpListener(ip, portNumber);
            TcpClient client = default(TcpClient);

            try
            {
                server.Start();
                Debug.WriteLine("Server started ... " + ip.ToString());
            }
            catch (Exception e)
            {
                Debug.WriteLine(e.ToString());
            }

            while (true)
            {
                client = await server.AcceptTcpClientAsync();
                byte[] recievedBuffer = new byte[100];
                NetworkStream stream = client.GetStream();
                stream.Read(recievedBuffer, 0, recievedBuffer.Length);
                string msg = Encoding.UTF8.GetString(recievedBuffer, 0, recievedBuffer.Length);
                Debug.WriteLine(msg);
            }
        }
    }


//in HTML
<script>
    console.log("test");
    var server = new Server.Server();
    server.connection();
    console.log("msg");
</script>

我不知道为什么 Debug.WriteLine 和 console.log 方法不起作用,输出或 javascript 控制台中没有打印任何内容。

服务器代码适用于 Android 客户端,如果服务器是“Console App”项目但在“Universal App Javscript”中没有附加任何内容,我没有警告或错误。所以不知道是不是我做的不好,因为console.log和Debug.WriteLine都不行。

标签: windowswin-universal-app

解决方案


我有一个适用于 windows 通用应用程序的解决方案,我删除了 Connection 并添加了以下方法:

public async void StartServer()
{
            try
            {
                var streamSocketListener = new Windows.Networking.Sockets.StreamSocketListener();
                streamSocketListener.ConnectionReceived += this.StreamSocketListener_ConnectionReceived;
                await streamSocketListener.BindEndpointAsync(new HostName("192.168.0.10"), PortNumber);
            }
            catch (Exception ex){}
}

private async void StreamSocketListener_ConnectionReceived(Windows.Networking.Sockets.StreamSocketListener sender, Windows.Networking.Sockets.StreamSocketListenerConnectionReceivedEventArgs args)
{
            string request;
            using (var streamReader = new StreamReader(args.Socket.InputStream.AsStreamForRead()))
            {
                request = await streamReader.ReadLineAsync();
            }
            sender.Dispose();
}


//in main.js just call this method
new Server.Server().startServer();

但我仍然不知道为什么 c# 中的 Debug.WriteLine() 和 javascript 中的 console.log() 不起作用。


推荐阅读