Есть функция, которая на localhost всегда выдает True, хотя сервера MySQL там нет, да и вообще она по любому порту на localhost всегда выдает True. Причем на удаленные адреса все пингуется правильно, заморочка только с localhost . Что тут не так работает? Код | Function ПроверитьСоединениеMySQL() As Boolean
Dim addr As IPAddress = IPAddress.Parse("127.0.0.1") Dim ep As New IPEndPoint(addr, 3306)
Dim soc As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) Dim asyncResult As IAsyncResult = soc.BeginConnect(ep, New AsyncCallback(AddressOf ConnectCallback), soc)
If asyncResult.AsyncWaitHandle.WaitOne(3000, False) Then soc.Close() strIPMySQL = "localhost" Return True Else soc.Close() addr = IPAddress.Parse("192.168.0.1") ep = New IPEndPoint(addr, 3306) soc = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) asyncResult = soc.BeginConnect(ep, New AsyncCallback(AddressOf ConnectCallback), soc)
If asyncResult.AsyncWaitHandle.WaitOne(3000, False) Then soc.Close() strIPMySQL = "192.168.0.1" Return True Else soc.Close() MessageBox.Show("Отсутствует соединение с сервером MySQL!!!", "Проверка соединения с сервером MySQL", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End If End If
End Function
Sub ConnectCallback(ByVal ar As IAsyncResult)
Dim connectDone As New Threading.ManualResetEvent(False)
Try Dim client As Socket = DirectCast(ar.AsyncState, Socket) client.EndConnect(ar) connectDone.Set() Catch ex As Exception End Try
End Sub
|
А вот эта, не асинхронная функция, с localhost работает правильно. Код | Function ПроверитьСоединениеMySQL() As Boolean
Dim addr As IPAddress = IPAddress.Parse("127.0.0.1") Dim ep As New IPEndPoint(addr, 3306)
'Dim tempSocket As New Socket(ep.AddressFamily, SocketType.Stream, ProtocolType.Tcp) Dim tempSocket As New Sockets.TcpClient Try tempSocket.Connect(ep) tempSocket.Close() strIPMySQL = "localhost" Return True Catch tempSocket.Close() addr = IPAddress.Parse("192.168.0.1") ep = New IPEndPoint(addr, 3306) 'tempSocket = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp) tempSocket = New Sockets.TcpClient Try tempSocket.Connect(ep) tempSocket.Close() strIPMySQL = "192.168.0.1" Return True Catch ex As Exception tempSocket.Close() MessageBox.Show("Отсутствует соединение с сервером MySQL!!!" & vbCrLf & ex.Message, "Проверка соединения с сервером MySQL", MessageBoxButtons.OK, MessageBoxIcon.Error) Return False End Try End Try
End Function
|
Получается дело в асинхронном методе, он почему то с localhost не работает. Что ему не так? Это сообщение отредактировал(а) kuzyaka - 19.8.2015, 13:46
|