solved by changing the port to a higher port. I used 3333 but it looks like anyone higher than 1024 works
I am trying to move my TCP server to an Android device using maui.
I tried to run a very simple TCP server on Android using maui.
the server works on Windows but not on Android.
I get "System.Net.Sockets.SocketException: 'Permission denied'" on the "serverSocket.Start();"
the code
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();
}
}
the manifest permissions
<?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>
solved by changing the port to a higher port. I used 3333 but it looks like anyone higher than 1024 works