我目前正在为自己制作一个软件平台。我有客户端和服务器端软件。我使用异步套接字,我在连接方面遇到了一些问题。这是我的连接功能。
private bool ConnectSocket()
{
try
{
if((this.soket != null) && this.soket.Connected)
{
this.soket.Shutdown(SocketShutdown.Both);
Thread.Sleep(10);
this.soket.Close();
return false;
}
this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip);
IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de);
this.soket.Blocking = false;
AsyncCallback callback = new AsyncCallback(this.OnSocketConnect);
this.soket.BeginConnect(EndPoint, callback, this.soket);
if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket");
return true;
}
catch(SocketException ex)
{
MessageBox.Show("Dogodila se greska prilikom povezivanja na server");
Console.WriteLine(ex.ToString());
}
return false;
}
即使我没有连接我的服务器,它也会识别(监听)我的连接,并且存在某种连接。问题是我无法从这一点继续,我无法发送任何数据,因为我没有连接的例外,我也没有超过这个if语句。
if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket");
有关如何解决这个问题的任何建议吗?
答案 0 :(得分:1)
不是100%肯定你想要完成什么但是在if语句中查看你的try catch你是否试图关闭连接,如果已经存在连接?以下是我会尝试的一些简单建议。
private bool ConnectSocket()
{
try
{
this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip);
IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de);
this.soket.Blocking = false;
AsyncCallback callback = new AsyncCallback(this.OnSocketConnect);
this.soket.BeginConnect(EndPoint, callback, this.soket);
if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket");
return true;
}
catch(SocketException ex)
{
MessageBox.Show("Dogodila se greska prilikom povezivanja na server");
Console.WriteLine(ex.ToString());
}
return false;
}
上述解决方案只是尝试重置连接而不关闭if语句中出现的内容。
private bool ConnectSocket()
{
try
{
this.soket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
System.Net.IPAddress adresa = System.Net.IPAddress.Parse(Properties.Settings.Default.server_ip);
IPEndPoint EndPoint = new IPEndPoint(adresa, 0x9de);
this.soket.Blocking = false;
AsyncCallback callback = new AsyncCallback(this.OnSocketConnect);
this.soket.BeginConnect(EndPoint, callback, this.soket);
if(this.soket.Connected) Console.WriteLine("Uspesno je konektovan socket");
return true;
if((this.soket == null) && this.soket.Connected == false)<-- or what ever the evaluation for not connection would be.
{
this.soket.Shutdown(SocketShutdown.Both);
Thread.Sleep(10);
this.soket.Close();
return false;
}
}
catch(SocketException ex)
{
MessageBox.Show("Dogodila se greska prilikom povezivanja na server");
Console.WriteLine(ex.ToString());
}
return false;
}
上面的解决方法只是在if = = null上使用!=所以它只会在连接为空时关闭,仔细检查以确保你有所有正确的IP等等来进行连接
希望这有帮助!如果不让我知道,我将删除答案(我必须使用答案,因为我不能在50代表评论)干杯!