2011-04-18 3 views
1

upLoad를 호출 할 때마다 Java 콘솔이 인쇄를 허용하지만 아무것도 전송하지 않습니다.AsyncSocket은 Java 소켓 서버에 연결할 수 있지만 데이터를 쓸 수 없습니다.

writedata 호출을 didConnectToHost로 변경했는데 클라이언트가 데이터를 전송했다고 말하면서 Java Server 콘솔에서이 데이터를 어떻게 표시 할 수 있습니까?

이 내 자바 서버 코드 :

import java.net.*; 
import java.io.*; 

public class Server 
{ 
    private ServerSocket ss; 
    private Socket socket; 
    private BufferedReader in; 
    private PrintWriter out; 

    public Server() 
    { 
     try 
     { 
      ss = new ServerSocket(8080); 

      while (true) 
      { 
       socket = ss.accept(); 
       System.out.println("accepted"); 
       in = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
       out = new PrintWriter(socket.getOutputStream(),true); 

       String line = in.readLine(); 
       out.println("you input is :" + line); 
       out.close(); 
       in.close(); 
       socket.close(); 
      } 
     } 
     catch (IOException e) 
     {} 
    } 

    public static void main(String[] args) 
    { 
     new Server(); 
    } 
} 

이 내 아이폰 클라이언트 코드 :

-(IBAction)upLoad{ 
    NSError* error; 
    NSString* hostIP = @"127.0.0.1"; 
    UInt16 port = 8080; 
    [aSocket connectToHost:hostIP onPort:port withTimeout:-1 error:&error]; 

    NSData *dataToUpload = [@"testxyz" dataUsingEncoding:NSUTF8StringEncoding]; 
} 

#pragma mark - 
#pragma mark socketdelegate 
- (void)onSocket:(AsyncSocket *)sock didConnectToHost:(NSString *)host port:(UInt16)port 
{ 
    connectionStatus.text = @"connected to server!"; 
    NSData *dataToUpload = [@"testxyz" dataUsingEncoding:NSUTF8StringEncoding]; 
    [sock writeData:dataToUpload withTimeout:-1 tag:0]; 
} 

- (void)onSocket:(AsyncSocket *)sock didWriteDataWithTag:(long)tag 
{ 
    connectionStatus.text = @"write complete!"; 
} 
+0

난 당신이 해결할 수있는 문제가 ESP 때, 당신은 당신의 예외를 인쇄하기보다는 그들을 무시하는 것이 좋습니다. 브라이언은 자바 측에서 문제가되지 않는 것으로 보인다고 주장했다. BTW : UTF-8을 보내는 경우 동일한 인코딩으로 읽어야합니다. –

+0

서버는 한 번에 하나의 연결 만 허용합니다. 이것은 테스트에 영향을 미치지 않습니다. –

+0

처음에는 코드를 실제로 잘못 읽었습니다. 그가 콘솔에서 다른 것을 보지 못하는 완벽한 이유가 있습니다. –

답변

0

글쎄, 당신이 콘솔에 아무것도 출력하지 않는.

out.println("you input is :" + line); 

서버에 텔넷하여 입력 할 경우 입력 한 내용이 다시 표시됩니다.

난 당신이 찾고있는 생각 :

System.out.println("you input is :" + line); 
+0

이것은 그 것이다! 서버 코드는 나에 의해 작성되지 않았으므로 내가 보낸 것을 인쇄 할 것을 당연시했습니다. – CarmeloS

+0

클라이언트 출력 스트림의 이름이 'out'이었으므로 작성하는 것이 쉬운 오타라고 생각합니다. 처음 읽었을 때 나는 그것을 놓쳤다. –

관련 문제