2012-10-22 3 views
0

클라이언트 C# 소켓을 사용하여 Java 서버 소켓과 통신하는 데 문제가 있습니다. 문제는 응답을 읽으려고 할 때 발생했습니다. 코드 라인Java 소켓 서버 및 클라이언트 소켓 C# 문제

Int32 bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0); 

내 클라이언트가 응답에서

IPHostEntry IPHost = Dns.Resolve("IP_ADDRESS"); 
Console.WriteLine(IPHost.HostName); 
string []aliases = IPHost.Aliases; 
IPAddress[] addr = IPHost.AddressList; 
Console.WriteLine(addr[0]); 
EndPoint ep = new IPEndPoint(addr[0],1024); 
Socket sock = 
    new Socket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp); 
sock.Connect(ep); 
if(sock.Connected) 
    Console.WriteLine("OK"); 
Encoding ASCII = Encoding.ASCII; 
string Get = "A"; 
Byte[] ByteGet = ASCII.GetBytes(Get); 
Byte[] RecvBytes = new Byte[256]; 
sock.Send(ByteGet, ByteGet.Length, 0); 
Int32 bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0); 
Console.WriteLine(bytes); 
String strRetPage = null; 
strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes); 
while(bytes > 0) { 
    bytes = sock.Receive(RecvBytes, RecvBytes.Length, 0); 
    strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes); 
    Console.WriteLine(strRetPage); 
} 
sock.Close(); 

: 내 코드는 이것이다. 신청서를 중단해야합니다. 그것은 소켓 서버에 응답하지 않는 것 같습니다. 특정 소켓 서버는 BitStream을 보내고받습니다.

+0

소켓은 기본적으로 _blocking_이므로 아무 것도 전송하지 않으면 '수신'통화가 차단됩니다 (예 : '중단'). –

+0

나는 sock.Send (ByteGet, ByteGet.Length, 0) 명령과 함께 보낸다. – Alle

+0

예, 서버를 보냈지 만 서버가 _back_을 보냅니 까? [Wireshark] (http://www.wireshark.org/)와 같은 도구를 사용하여 데이터가 실제로는 앞뒤로 움직이는 지 확인하는 것이 좋습니다. –

답변

1

서버의 Java 코드가 없으면 알 수 없지만 서버가 예상 된 256 바이트를 보내지 않은 것 같습니다. Socket.Receive가 기본적으로 블로킹하고 있기 때문에 클라이언트는 데이터를 기다리고 있습니다.

+0

'Receive' 호출은 _up_을 요청 된 바이트 수만큼 읽습니다. 그러나 더 이상 사용할 수 없다면 더 적게 읽을 수 있습니다. –

+0

'while (bytes> 0)'나는 조건이 결코 충족되지 않으므로 팀이 맞습니다. 클라이언트는 영원히 기다립니다. 'read'는 예상보다 적게 읽을 수 있습니다. 그러나 AFAIK의 "읽기"를 "차단 해제"하려면 적어도 * 뭔가 * 연결이 닫혀 있어야합니다. – Fildor

+0

그래서 ... Byte []를 사용할 수 있습니다 RecvBytes = new Byte [1]; 1 바이트? – Alle