none
同一個Socket Connect 後執行Listen RRS feed

  • 問題

  • 各位大大好~~
    我用VS2005 寫網路程式時 碰到個問題
    我要做一個封包轉發的程式
    固定Listen 8000 Port
    所有接收到的資料
    要使用本機的8000 這個Port 丟到遠端的15000 Port

    接收的部分都寫好了
    可是在執行轉拋時
    要對遠端IP 進行連線 執行 socket.connect 時
    會出現 "您無法在呼叫 Listen 方法之後執行此作業。"
    這個錯誤訊息

    請問 有甚麼辦法可以讓一個Port 在Listen時 也可以對其他的IP建立連線??


    2009年2月4日 上午 10:02

解答

所有回覆

  • 接收到資料之後要丟到遠端時有需要一定要使用8000 port嗎?在本機8000 port已經在做listen就不能有第二個socket指定要使用這個port了,丟資料出去應該讓系統自行去選擇port number就可以了。
    態度決定一切 ! - blog : http://bauann-makeit.blogspot.com/
    2009年2月5日 上午 01:39
    版主
  • listen 是用 accept 接受連線,不是用 connect 。

    一般來說,開一個 socket 做 listen ,當有連線要求時,都是新開 socket 來做 accept ,不使用 listen 中的 socket ,這樣 server 才能持續接收連線要求,除非你有特殊設計,或是你是設計成 p2p 的架構。

    線上手冊內的範例程式碼即可參考,或是透過 google 搜尋本版既有討論:
    http://www.google.com.tw/search?hl=zh-TW&q=socket+accept+site%3Asocial.msdn.microsoft.com%2FForums%2Fzh-TW%2F&meta=&aq=f&oq=

    • 已標示為解答 a132 2009年2月6日 上午 05:46
    2009年2月5日 上午 06:15