2014-10-04 2 views
0

저는 소켓이 아직 없으므로 안드로이드 클라이언트와 c 서버를 만드는 데 약간의 문제가 있습니다.C 서버가 java/android 클라이언트 메시지를 수신하지 못합니다.

c 서버가 잘 실행되며, 안드로이드 클라이언트도 c 서버에 잘 연결됩니다. 그러나 서버와 통신 할 때 문제가 발생합니다. 간단한 메시지를 보내려고하면 서버가 메시지를받지 못하는 것 같습니다. 전혀

void readMsg(int client){ 
    char buffer[1024]; 
    int n = 0; 

    memset(buffer, 0, sizeof(buffer)); 

    printf("waiting for message..\n"); 
    while((n=recv(client, buffer, sizeof buffer - 1, 0)) > 0){ 
     printf("recv=%s\n", buffer); 
    } 

    printf("n=%d\n", n); 
} 

그리고 아무것도 표시됩니다 그래서 여기

는 메시지를 대기 서버의 코드입니다. waiting for message..에 차단되었습니다.

그리고 자바 코드에 관한 것은 메시지를 보내려면 여기있다 :

OutputStreamWriter osw; 
PrintWriter pw; 
try { 
    osw = new OutputStreamWriter(server.getOutputStream(), "UTF-8"); 
    pw = new PrintWriter(osw, true); 
    pw.print(msg); 
    pw.flush(); 

}catch(IOException ioe) { 
    ioe.printStackTrace(); 
} 

[편집]

그냥 더 많은 정보를 제공, 기능 readMsg()가 호출 단지 서버를 시작한 후 한 번 클라이언트가 연결됩니다.

은 자세한 내용을 보려면 여기를 내가 서버에 연결하는 방법입니다

try{ 
    //I am sure that the host and port are correct 
    Socket server = new Socket(host, port); 

}catch(IOException ioe){ 
    ioe.printStackTrace(); 
} 

좋아, 내가 무엇이 잘못되었는지 발견, 나는 서버에 두 번 연결하는 사실이었다. 그 결과 올바른 소켓을 통해 메시지를 보낼 수 없었습니다. 모두를위한 죄송합니다

모든 당신의 도움을 주셔서 감사

[/ 편집]

이미이 사이트에 여러 가지 다른 게시물을보고 몇 가지 솔루션을 시도했습니다.

+0

내부 OutputStreamWriter을 포장하는 println 대신 print의를 사용하는 메시지가 클라이언트로부터 전송되는 데 도움이 모든 사전에 감사합니다? 어떻게 서버에서 readMsg() 함수를 호출합니까? – 4pie0

+0

예, 메시지는 클라이언트, android 응용 프로그램에서 전송됩니다. – BigFoot

+0

C 서버에 '텔넷'하여 텔넷 프롬프트에서 입력 한 내용을 인쇄 할 수 있습니까? 'telnet servername 1234' 여기서 servername과 1234는 C 서버를 실행하는 호스트이며 prc ... – rolfl

답변

1

BufferedWriter

pw = new PrintWriter(new BufferedWriter(osw), true); 
pw.println(msg); 
+0

소켓은 닫혀있을 때 recv가 완료되어야합니다 ... 아, 허튼 소리, 전체 소켓이 아니라 출력 스트림을 닫으라는 메시지가 나타납니다. . – rolfl

+0

@ashoke 죄송합니다. 아무 것도 바뀌지 않았습니다 – BigFoot

+0

'onCreate' 안에'server' 소켓을 만드시겠습니까?, 그렇다면 별도의 스레드에서 수행하는 것을 고려하십시오. – ashoke

관련 문제