VB套接字异常问题 - 端口

时间:2013-06-16 16:12:10

标签: vb.net sockets

创建一个可以在两台计算机之间传递构建字符串的程序。

在挖掘和更改语法之后,我终于能够看到这个套接字异常:

System.Net.Sockets.SocketException (0x80004005): Only one usage of each socket address (protocol/network address/port) is normally permitted
   at System.Net.Sockets.Socket.DoBind(EndPoint endPointSnapshot, SocketAddress socketAddress)
   at System.Net.Sockets.Socket.Bind(EndPoint localEP)
   at System.Net.Sockets.TcpListener.Start(Int32 backlog)
   at System.Net.Sockets.TcpListener.Start()
   at ChatProgFinal.chatForm.serverMode()

我正在使用的端口是11337.根据netstat,我没有使用该端口,所以我不确定我怎么可能抛出这个异常。

这是我的serverMode块:

Public Sub serverMode()
    Try
        Dim server As TcpListener = Nothing
        server = New TcpListener(LocalIPEndPointAnyIP)
        server.Start()
        Dim incomingClient As TcpClient = server.AcceptTcpClient()

        Do While isAlive = True And incomingClient.Connected = True
            stream = incomingClient.GetStream()
            If stream.CanRead Then
                RaiseEvent DataReceived(stream)
            End If
            If incomingClient.Connected = False Then
                RaiseEvent statusCheck("Disconnected")
                isAlive = False
                server.Stop()
            End If
        Loop
    Catch e As Exception
        RaiseEvent statusCheck(e.ToString)
        Using outfile As New StreamWriter(docPath + "\log.txt")
            outfile.Write(e.ToString)
        End Using
    Finally
        stream.Close()
    End Try
End Sub

感谢您对此提供的任何建议。 附带问题:我不确定如何测试/调试通过Visual Studio 2010在两台计算机之间进行通信的软件。我现在正在做的是发布它并部署到测试VM。有人可以使用任何其他方法吗?

1 个答案:

答案 0 :(得分:0)

根据Hans的评论,你可能在整个程序的生命周期中不止一次地调用serverMode。我注意到的一件事是,在finally块中,您没有在服务器上调用.Stop,这意味着可以在不关闭serverMode的情况下退出{{1}}。一旦发生这种情况,重复调用启动服务器可能会失败。