[英]Unable to connect via TCP connection to Android
我目前正在开发一个Android应用,该应用需要通过TCP / IP连接到Windows PC,其中Windows PC是Server,而Android是Client 。 问题出在Connection中! 每当我尝试启动连接时,它将一直等待客户端,并且在客户端中单击连接按钮时,实际上什么也没有发生!
我正在工作的服务器端代码是
TcpListener listner = new TcpListener(IPAddress.Any, 8126);
NetworkStream netstream;
TcpClient client;
byte[] datalength = new byte[4];
public void btnstart_Click(object sender, EventArgs e)
{
Thread startconnection = new Thread(new ThreadStart(connect));
startconnection.Start();
}
public void connect()
{
try
{
listner.Start(); //Starts Listening to any IP with port 8126
//Invoked Just because of CrossThreading Error
Invoke(new MethodInvoker(delegate
{
this.lbl_status.Text = "Status : Waiting for Client";
}));
//Invoke Complete.
listner.Server.Listen(1);
client = listner.AcceptTcpClient();
if (client.Connected)
{
Invoke(new MethodInvoker(delegate
{
this.lbl_status.Text = "Status : Connected Successfully";
}));
//serverReceive();
}
}
catch (Exception ex)
{
//lbl_status.Text = "Status : " + ex.Message;
MessageBox.Show(ex.Message);
}
}
和客户端代码为
TcpClient tcpclient;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Button btnConnectClick = FindViewById<Button>(Resource.Id.btnConnect);
btnConnectClick.Click += BtnConnectClick_Click;
}
private void BtnConnectClick_Click(object sender, System.EventArgs e)
{
Toast.MakeText(this, "Connection waiting", ToastLength.Long);
try
{
IPAddress ip = IPAddress.Parse(Resource.Id.ipadd.ToString()); //Ip from textbox
tcpclient.Connect(ip, 8126);
if (tcpclient.Connected)
{
Toast.MakeText(this, "Connected Successfully!", ToastLength.Long);
}
}
catch (System.Exception ex)
{
Toast.MakeText(this, ex.Message, ToastLength.Long);
}
}
我不知道确切的问题在哪里!
我使用WPF应用程序作为PC站点上的服务器,以及Xamarin.Android应用程序作为真实设备上的客户端,对您的代码进行了测试。
在我身边工作正常。 我在代码中发现的唯一问题是,在客户端,您没有初始化tcpclient
,在对tcpclient.Connect(ip, 8126);
编码时, tcpclient
为null tcpclient.Connect(ip, 8126);
(但它不会引发异常),我只是这样修改了您的代码:
IPAddress ip = IPAddress.Parse("..."); //Ip from textbox
tcpclient = new TcpClient();
tcpclient.ConnectAsync(ip, 8126);
您可以尝试一下,如果仍然无法使用,请确保您的设备在同一网络中。
您知道Resource.Id.ipadd.ToString()
返回什么吗? 就像2130968576这样的数字。您的OnCreate方法必须为
EditText ipadd;
protected override void OnCreate(Bundle bundle)
{
base.OnCreate(bundle);
SetContentView(Resource.Layout.Main);
Button btnConnectClick = FindViewById<Button>(Resource.Id.btnConnect);.
ipadd = FindViewById<EditText>(Resource.Id.ipadd); // Create object of textbox
btnConnectClick.Click += BtnConnectClick_Click;
}
然后使用
IPAddress ip = IPAddress.Parse(ipadd.Text);
它将返回IP地址。
我在这里得到了答案,我正在执行的代码是正确的,并且一直在成功建立TCP连接,但是问题是,
if (client.Connected) { Invoke(new MethodInvoker(delegate { this.lbl_status.Text = "Status : Connected Successfully"; })); }
每次它连接Client.Connected
返回False
我不确定为什么。 还有其他方法可以检查客户端是否连接?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.