提示“在其上下文中,该请求的地址无效,System”,请高手帮忙。

gdutcrcl 2008-05-22 10:29:17
运行以下代码正常,但点BTN开启SOCKET服务候提示“在其上下文中,该请求的地址无效,System”,请问这是什么问题?

谢谢!


Imports System.Net
Imports System.Net.Sockets
Imports System.Threading
Imports System.Text



Public Class Form1
Private objSocketServer As SocketServer

Public Sub New()
objSocketServer = New SocketServer()
' 此调用是 Windows 窗体设计器所必需的。
InitializeComponent()

' 在 InitializeComponent() 调用之后添加任何初始化。

End Sub


Private Sub BTN_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTN.Click
objSocketServer.BindIP = txtIP.Text.Trim()
objSocketServer.BindPort = Integer.Parse(txtPort.Text)
objSocketServer.Run()
End Sub

Private Sub BTNStop_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BTNStop.Click
objSocketServer.StopRun()
End Sub
End Class

Public Class SocketServer
Private m_BindIp As String
Private m_BindPort As String
Private RunState As Boolean
Private aryClientList As ArrayList
Private SckServer As Socket
Private Done As ManualResetEvent

Public Sub New()
m_BindIp = ""
m_BindPort = 0
RunState = False
aryClientList = New ArrayList()
Done = New ManualResetEvent(False)
End Sub

Public Property BindIP() As String
Get
Return m_BindIp
End Get
Set(ByVal value As String)
m_BindIp = value
End Set
End Property

Public Property BindPort() As Integer
Get
Return m_BindIp
End Get
Set(ByVal value As Integer)
m_BindIp = value
End Set
End Property

Public Sub StopRun()
RunState = False
SckServer.Close()
End Sub

Public Sub Run()
Dim ipLocal As IPAddress
Dim intListenPort As Integer
Dim ipepServer As IPEndPoint

ipLocal = IPAddress.Parse(m_BindIp.Trim())
intListenPort = m_BindPort
ipepServer = New IPEndPoint(ipLocal, intListenPort)
SckServer = New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
Try
SckServer.Bind(ipepServer)
SckServer.Listen(100)
Dim thdAccept As New Thread(AddressOf ThreadBeginAccept)
thdAccept.Start()
Catch ex As Exception
MessageBox.Show("错误描述" & ex.Message & vbCrLf & "错误源" & ex.Source, "错误", MessageBoxButtons.OK, MessageBoxIcon.Error)
Exit Sub
End Try
End Sub

Private Sub ThreadBeginAccept()
RunState = True
Do
Done.Reset()
SckServer.BeginAccept(New AsyncCallback(AddressOf OnConnectionRequest), SckServer)
Done.WaitOne()
Loop While RunState = True
End Sub

Private Sub OnConnectionRequest(ByVal ar As IAsyncResult)
Done.Set()
Dim Listener As Socket = CType(ar.AsyncState, Socket)
NewConnection(Listener.EndAccept(ar))
Listener.BeginAccept(New AsyncCallback(AddressOf OnConnectionRequest), Listener)
End Sub

Private Sub NewConnection(ByVal sckClient As Socket)
Dim objSocketClient As New SocketClient(sckClient)
Debug.Print(objSocketClient.Sock.RemoteEndPoint.ToString() & "已经连接" & vbCrLf)
aryClientList.Add(objSocketClient)
objSocketClient.ReceiveCallback(Me)
End Sub


Public Sub OnReceiveData(ByVal ar As IAsyncResult)
Dim objSocketClient As SocketClient
objSocketClient = CType(ar.AsyncState, SocketClient)
Dim bytReceiveData() As Byte = objSocketClient.GetReceiveData(ar)
'判断远程客户端是否断开连接
If bytReceiveData.Length < 1 Then
Debug.Print(objSocketClient.Sock.RemoteEndPoint.ToString() & "已经断开" & vbCrLf)
objSocketClient.Sock.Close()
aryClientList.Remove(objSocketClient)
Exit Sub
End If
Dim x As String = Encoding.ASCII.GetString(bytReceiveData).Trim()
Debug.Print(vbCrLf & "接受数据" & x & vbCrLf)
If Left(x, x.Length) = "123456" Then
Dim SendBuff() As Byte = Encoding.ASCII.GetBytes("567890".ToCharArray())
objSocketClient.Sock.Send(SendBuff, SendBuff.Length, SocketFlags.None)
End If
objSocketClient.ReceiveCallback(Me)
End Sub

End Class


Public Class SocketClient
Private m_sock As Socket
Private RecvBuff(256) As Byte

Public Sub New(ByVal sckSock As Socket)
m_sock = sckSock
End Sub

Public ReadOnly Property Sock() As Socket
Get
Return m_sock
End Get
End Property



Public Sub ReceiveCallback(ByVal objSocketServer As SocketServer)
Dim ReceiveData As AsyncCallback
Try
ReceiveData = New AsyncCallback(AddressOf objSocketServer.OnReceiveData)
m_sock.BeginReceive(RecvBuff, 0, RecvBuff.Length, SocketFlags.None, ReceiveData, Me)
Catch ex As Exception

End Try
End Sub

Public Function GetReceiveData(ByVal ar As IAsyncResult) As Byte()
Dim intByteLen As Integer
Dim bytReturn As Byte()

intByteLen = 0
Try
intByteLen = m_sock.EndReceive(ar)
Catch ex As Exception

End Try
ReDim bytReturn(intByteLen - 1)
Array.Copy(RecvBuff, bytReturn, intByteLen)
Return bytReturn
End Function

End Class
...全文
736 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
gdutcrcl 2008-06-17
  • 打赏
  • 举报
回复
ding
神之泪花 2008-06-17
  • 打赏
  • 举报
回复
Mark

16,717

社区成员

发帖
与我相关
我的任务
社区描述
VB技术相关讨论,主要为经典vb,即VB6.0
社区管理员
  • VB.NET
  • 水哥阿乐
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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