none
VB tcp/ip 問題 RRS feed

  • 問題

  • 最近我在寫一個tcp/ip程式

    大概如下

     Sub Main()

            Dim serversocket As New Socket( _
                                           AddressFamily.InterNetwork, _
                                           SocketType.Stream, _
                                           ProtocolType.Tcp)

            Try
                Dim localhost As New IPEndPoint(IPAddress.Parse("127.0.0.1"), "1003")
                serversocket.Bind(localhost)
                serversocket.Listen(1000)
                Dim lc As New ListenClient(serversocket)
                Dim serverthread As New Thread(New ThreadStart(AddressOf lc.ServerThreadProc))
                serverthread.Start()
            Catch ex As Exception
                Console.WriteLine(ex)
                Console.ReadLine()
            End Try

    Public Sub ServerThreadProc()

     Dim clientsocket As System.Net.Sockets.Socket

    Try
                While (True)


            Dim rcdata(1024) As Byte
            Dim rbuffer As Int32

    rbuffer = clientsocket.Receive(rcdata)

    While (rbuffer <> 0)

    select case

    ...

    end select

    rbuffer = clientsocket.Receive(rcdata)

    End While
                End While

            Catch ex As Exception
                Thread.CurrentThread.Abort()
                'Console.WriteLine(ex)
                'Console.ReadLine()
            End Try
        End Sub

    但當一個客戶端中斷連線後,程式便會錯誤:連線已被強制中斷,之後就停止了程式。

    因為listenthreadproc儲存了一些變數,所以不能關掉整個thread,有什麼解決方法嗎?


    2011年8月9日 上午 01:30

解答

  • 重點會在 Socket.Accept後, 要為 Client Socket產生一個新的執行個體, 然後再產生另一個執行緒來做接收的動作

    類似這一篇的作法

    [實作同步 .NET Socket TCP《使用TcpClient與TcpListener類別》]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 perezhk 2011年8月13日 上午 12:57
    2011年8月9日 上午 04:46
    版主

所有回覆

  • 1) 沒有看到listenthreadproc?

    2) Listen Thread只有當Server程式結束時才需要結束, 否則Server就無法處理用戶端的連線需求了

    2011年8月9日 上午 01:41
  • 重點會在 Socket.Accept後, 要為 Client Socket產生一個新的執行個體, 然後再產生另一個執行緒來做接收的動作

    類似這一篇的作法

    [實作同步 .NET Socket TCP《使用TcpClient與TcpListener類別》]


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。
    • 已標示為解答 perezhk 2011年8月13日 上午 12:57
    2011年8月9日 上午 04:46
    版主