2012-06-04 2 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는 버퍼를 버퍼링하므로 소켓 수신 버퍼가 가득 차면 결국 차단됩니다. Windows는 사용자의 끝에 'broken pipe'또는 'peer by connection reset'이되는 RST를 보냅니다. – EJP

+0

읽기 또는 쓰기 스트림이 닫혔는지 확인하는 방법을 찾았습니다. 올바른 SelectMode와 함께 Poll 메서드를 사용할 수 있습니다. –