You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI C# TCP Server在Android运行失败的问题及解决办法

MAUI TCP Server在Android端启动报错:System.Net.Sockets.SocketException: Permission denied

问题说明

使用MAUI将TCP Server迁移至Android设备,该服务在Windows系统可正常运行,但在Android端执行serverSocket.Start()时触发System.Net.Sockets.SocketException: 'Permission denied'异常。

相关代码

using System.Net.Sockets;
using System.Net;
using System.Text;

namespace terminal_only;

public partial class MainPage : ContentPage
{
    int count = 0;
    string read;
    TcpClient client;
    NetworkStream ns;
    TcpListener serverSocket;
    bool connstat;

    public MainPage()
    {
        InitializeComponent();
        startthread();
    }


    private void startthread()
    {
        Thread svrThread = new Thread(new ThreadStart(receiver)); svrThread.IsBackground = true; svrThread.Start();
        connstat = true;
    }

    private void receiver()
    {
        serverSocket = new TcpListener(IPAddress.Any, 85);// Convert.ToInt32(textBox1.Text));
        serverSocket.Start();
        while (true)
        {
            client = serverSocket.AcceptTcpClient();
            ns = client.GetStream();

            while (client.Connected && connstat)
            {
                try
                {
                    byte[] readmsg = new byte[100];
                    ns.Read(readmsg, 0, readmsg.Length);
                    read = Encoding.ASCII.GetString(readmsg);
              //      textBox2.Invoke(new MethodInvoker(delegate () { textBox2.Text = textBox2.Text + "\r\n" + read; }));
                    byte[] msg = System.Text.Encoding.ASCII.GetBytes("gotit");
                    ns.Write(msg, 0, msg.Length);
                    /*                    if (client.Client.Poll(0, SelectMode.SelectRead))
                                        {
                                            byte[] buff = new byte[1];
                                            if (client.Client.Receive(buff, SocketFlags.Peek) == 0)
                                            {
                                                connstat = false;
                                            }
                                        }
                                    }*/
           //         textBox2.Invoke(new MethodInvoker(delegate () { textBox2.Text = textBox2.Text + "\r\nDisconnected"; }));
                    if (!connstat) break;
                }
                catch { }
            }
        }
        serverSocket.Stop();
        startthread();
    }
}

Android清单权限配置

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
    <application android:allowBackup="true" android:icon="@mipmap/appicon" android:supportsRtl="true"></application>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
    <uses-sdk android:minSdkVersion="21" />
</manifest>

错误情况

执行serverSocket.Start()时抛出异常:System.Net.Sockets.SocketException: 'Permission denied'

解决方案

将监听端口修改为1024以上的端口(例如3333),问题即可解决。


内容的提问来源于stack exchange,提问作者Amos Rohe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 22:33:35