socket通讯问题

zhangfengyi 2017-08-11 04:08:08
以下是vb.net socket程序,以前一直正常,现在返回ExSocketState.ExSocketNoConnect,连接主机不成功,传过来的strHostIP地址为192.168.1.10,
Dim ipHostInfo As IPHostEntry = Dns.GetHostEntry(strHostIP)
Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
Dim remoteEP As New IPEndPoint(ipAddress, iPort)
remoteEP地址为192.168.1.18(本机地址),连接不成功,是这样个原因吗,以前也是这个程序,没有做过任何改动,为什么现在连接不成功,我网上查了下相关文档,这个应该是远程主机地址,我应该怎样改才能通过。

Private connectDone As New ManualResetEvent(False)
Private sendDone As New ManualResetEvent(False)
Private receiveDone As New ManualResetEvent(False)
Private response As String = String.Empty
Private iTimeOutM As Integer
Private isConn As Boolean = True 'False
Public Function SendTo(ByVal strHostIP As String, _
ByVal iPort As Integer, _
ByVal iTimeout As Integer, _
ByVal strSend As String, _
ByRef strRecv As String, _
ByVal Merch_ID As String, _
ByVal ULNm As String) As ExSocketState
On Error GoTo go_Err
Dim ipHostInfo As IPHostEntry = Dns.GetHostEntry(strHostIP)
Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
Dim remoteEP As New IPEndPoint(ipAddress, iPort)
Dim client As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)

strRecv = ""
If iTimeout > 0 And iTimeout < 200000 Then
iTimeOutM = iTimeout
Else
iTimeOutM = 500000 '5000
End If
Dim s1 = Now()
SendTo = ExSocketState.ExSocketUnKnown
client.BeginConnect(remoteEP, New AsyncCallback(AddressOf ConnectCallback), client)
Dim s2 = Now()
If connectDone.WaitOne(iTimeOutM, False) = True Then
If isConn = True Then
Send(client, strSend, Merch_ID, ULNm)
If sendDone.WaitOne(iTimeOutM, False) = True Then
If isConn = True Then
Dim state As New StateObject
state.workSocket = client
If Receive(state, Merch_ID, ULNm) Then
strRecv = state.sb.ToString()
If strRecv.Length > 10 Then
strRecv = strRecv.Substring(10, strRecv.Length - 10)
Else
strRecv = ""
End If
SendTo = ExSocketState.ExSocketSucceed
Else
SendTo = ExSocketState.ExSocketUnKnown
End If
Else
SendTo = ExSocketState.ExSocketUnKnown
End If
Else
SendTo = ExSocketState.ExSocketUnKnown
End If
Else
SendTo = ExSocketState.ExSocketNoConnect
End If
Else
SendTo = ExSocketState.ExSocketNoConnect
End If
go_Exit:
If client.Connected = True Then
client.Shutdown(SocketShutdown.Both)
End If
client.Close()

Exit Function
go_Err:
GoTo go_Exit
End Function

Private Sub ConnectCallback(ByVal ar As IAsyncResult)
On Error GoTo go_Err
Dim client As Socket = TryCast(ar.AsyncState, Socket)
If client IsNot Nothing Then
isConn = client.Connected
client.EndConnect(ar)
Else
isConn = False
End If
connectDone.Set()
go_Exit:
Exit Sub
go_Err:
isConn = False
connectDone.Set()
GoTo go_Exit
End Sub
...全文
235 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfengyi 2017-08-14
  • 打赏
  • 举报
回复
Dim remoteEP As New IPEndPoint(ipAddress, iPort) 改为 Dim remoteEP As New IPEndPoint(ipAddress.Parse(strHostIP), iPort) 就能取到远程IP

4,356

社区成员

发帖
与我相关
我的任务
社区描述
通信技术相关讨论
社区管理员
  • 网络通信
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧