none
請問一個在 PocketPC 上 Socket 連線的問題 RRS feed

  • 問題

  • 各位大大好,
    我的某台 PC 上, 跑了一支程式, 在 port 34001 ~ 34200 之間, 同時有 5 個 port 在 listen,
    然後我用 vb2008 開一個 smart device application, 平台是 WM5 的模擬器,
    要去 scan 出這 5 個 port,
    於是我 new 200 個 socket , 參數是 tcp 的,
    然後各別用 beginconnect, 連同一個 ip , 200 個 port,
    從連線回來的 asynccallback function 裡頭看,
    看到很奇怪的現象, 在 34001 ~ 34015 , socket.connected 都是 true,
    其他的很多是連不上的(這 200 個 port 裡頭有大概 15 個有 connected = true 的),
    有的會產生 socketexception, 進 catch, 例外的 msg 是遠端斷線,
    但我當時去 pc 看, 這 5 個 port 分別是 34101 , 34150, 34162, 34177, 34190,
    這 5 個 port 都連不上, 但前面沒有 listen 的卻連得上,
    而這支程式用 PC 跑都又正常, 只有那 5 個 listen 的 port 可以正常連線,
    請問有沒有哪位大大可以幫我看看我是哪裡弄錯了嗎? 謝謝.

    程式碼如下, (xxx.xxx.xxx.xxx 是我另一台 pc 的 ip)
    Imports System.Net
    Imports System.Net.Sockets

    Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    For i As Integer = 34001 To 34200
    Dim sck As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
    Dim ep As New IPEndPoint(IPAddress.Parse("xxx.xxx.xxx.xxx"), i)
    Dim obj() As Object = {sck, ep}
    sck.BeginConnect(ep, New AsyncCallback(AddressOf cbCnt), obj)
    Next
    End Sub

    Private Sub cbCnt(ByVal ar As IAsyncResult)
    Dim obj() As Object = ar.AsyncState
    Dim sck As Socket = obj(0)
    Dim ep As IPEndPoint = obj(1)

    Try
    sck.EndConnect(ar)
    If sck.Connected Then
    Debug.WriteLine("port = " & ep.Port & " Connected")
    sck.Shutdown(SocketShutdown.Both)
    End If
    Catch ex As Exception
    Debug.WriteLine("port = " & ep.Port & " catch")
    End Try

    sck.Close()
    sck = Nothing

    GC.Collect()
    End Sub
    End Class

    2009年1月15日 下午 05:35