如果对方服务器开启,则连接正常,如下—> private void bt_Connect_Click(object sender, EventArgs e)
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(serverFullAddr);
}但是,有时对方服务器并没有启动,既最后一行代码提示—>由于目标机器积极拒绝,无法连接。 219.126.131.83:123我现在的目标是—>不管对方服务器开启没开启,程序都去连接,连接失败的话也不会报错,而是每阁一段时间去尝试连接一次.我现在的想法是->当连接失败时,触发Timer,在Timer中每隔些时间去连接一次,直到连接成功后,Timer终止.代码如下—> private void bt_Connect_Click(object sender, EventArgs e)
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.Connect(serverFullAddr);
}
catch
{
timer1.start();
}
} private void timer1_Tick(object sender, EventArgs e)
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.Connect(serverFullAddr);
}
catch
{
return;
}
timer1.stop();
}
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
socket.Connect(serverFullAddr);
}但是,有时对方服务器并没有启动,既最后一行代码提示—>由于目标机器积极拒绝,无法连接。 219.126.131.83:123我现在的目标是—>不管对方服务器开启没开启,程序都去连接,连接失败的话也不会报错,而是每阁一段时间去尝试连接一次.我现在的想法是->当连接失败时,触发Timer,在Timer中每隔些时间去连接一次,直到连接成功后,Timer终止.代码如下—> private void bt_Connect_Click(object sender, EventArgs e)
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.Connect(serverFullAddr);
}
catch
{
timer1.start();
}
} private void timer1_Tick(object sender, EventArgs e)
{
int port = 0;
IPAddress serverIP;
IPEndPoint serverFullAddr; port = 123; serverIP = IPAddress.Parse("219.126.131.83"); serverFullAddr = new IPEndPoint(serverIP,port); socket = new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
try
{
socket.Connect(serverFullAddr);
}
catch
{
return;
}
timer1.stop();
}
{
while (_messages.Count > 0)
{
TcpClient client = new TcpClient();
try
{
client.Connect(IPAddress.Parse(_activeHost.IP), _activeHost.Port); string message = _messages.Dequeue(); byte[] buffer = Encoding.Unicode.GetBytes(message); client.Client.Send(buffer); Log(new MessageEventArgs(message, _messages.Count, MessageStatus.Success, null));
}
catch (SocketException ex)
{
_hasFailures = true;
string[] messages = _messages.ToArray();
Log(new MessageEventArgs(null, _messages.Count, MessageStatus.Failure, ex.Message)); _messages.Clear();
//save array to file
StringBuilder allMessages = new StringBuilder();
foreach (string message in messages)
{
allMessages.Append(message + Environment.NewLine);
}
File.AppendAllText(_filepath, allMessages.ToString(), Encoding.UTF8);
//failover
_activeHost = FindHost();
}
finally
{
if (client.Connected)
{
client.Client.Shutdown(SocketShutdown.Both);
client.Client.Disconnect(false);
}
}
}
_backgroundWorker = null;
}
http://www.codesoso.com/code/Socket-Multi-Host.aspx