2012-06-04 81 views
0

在node.js中,可能有半開放套接字。這意味着套接字可以在不關閉整個套接字的情況下變爲只讀或寫入。對於這樣的一個例子:半開放套接字

var net = require("net"); 
net.createServer({allowHalfOpen:true},function(c){ 
    c.on("data",function(d){ 
     console.log(d+""); 
    }); 
    c.on("end",function(){ 
     console.log("ended"); 
     c.end("thx"); 
    }); 
}).listen(888); 

var c = net.connect(888,function(){ 
    c.end("hi"); 
    c.on("data",function(d){ 
     console.log(d+""); 
    }); 
    c.on("end",function(){ 
     console.log("ended"); 
    }); 
}); 

輸出:

hi 
ended 
thx 
ended 

有沒有在C#的方式來關閉套接字的一個方向?另外,有沒有辦法知道套接字是否可讀,但不可寫,反之亦然?

回答

1

是的。 TCP中有一個「關閉輸出」操作,在C#中有一個API。再看一次。

+0

哦,真的!這很酷。但是,如果遠程套接字已關閉讀取流或寫入流,我怎樣才能檢測是否可以讀取或寫入當前套接字? –

+0

@VanCoding如果另一端已經關閉了輸出,當你閱讀時,你會得到EOS,就像他關閉了整個連接一樣。如果他關閉輸入取決於他的平臺(NB不是你的),會發生什麼情況。 BSD只會丟掉你的數據; Linux會緩衝它,所以當他的socket接收緩衝區填滿時你最終會阻塞; Windows將發送一個RST,它將在您的最後成爲「斷開的管道」或「由對等方重置的連接」。 – EJP

+0

我發現如何確定讀取或寫入流是否關閉。我可以用正確的SelectMode使用輪詢方法。 –