2012-03-15 3 views
4

TCP 서버 역할을하는 Java 응용 프로그램과 클라이언트 역할을하는 PHP 스크립트 사이의 단일 포트에 간단한 TCP 연결을 설정하려고합니다.간단한 Java TCP 서버 및 PHP 클라이언트 문제

다음 코드는 각각 게시 할 예정이지만 문제는 다음과 같습니다. Java 서버에 데이터를 연결하여 보낼 수 있습니다. 나는 그 자료를 얻고 그것을 인쇄 할 수있다. 내 문제는 PHP 서버에 응답을 다시 보내려고 발생합니다.

"echo socket_read ($ socket, 14, PHP_NORMAL_READ);"라는 마지막 줄을 주석 처리 할 때 " 데이터는 Java 서버에 잘 전달됩니다. 이 줄을 다시 추가하면 데이터가 Java 서버에 도착하지 않습니다.

내 문제는 내 문제가 내가 자바에서 데이터를 보내거나 서버에서 PHP로 데이터를 가져 오는 방법과 관련이 있다고 가정합니다.

이것은 정말 저조했습니다. 어떤 도움을 주시면 감사하겠습니다!

자바 서버 :

protected ServerSocket socket; 
protected final int port = 9005; 
protected Socket connection; 
protected String command = new String(); 
protected String responseString = new String(); 


socket = new ServerSocket(port); 


while(true) 
{ 
    // open socket 
    connection = socket.accept(); 
    // get input reader 
    InputStreamReader inputStream = new InputStreamReader(connection.getInputStream()); 
    BufferedReader input = new BufferedReader(inputStream); 
    // get output handler 
    DataOutputStream response = new DataOutputStream(connection.getOutputStream()); 

    // get input 
    command = input.readLine(); 

    // process input 
    Logger.log("Command: " + command); 
    responseString = command + " MC2 It Works!"; 

    // send response 
    response.writeBytes(responseString); 
    response.flush(); 
    response.close(); 
} 

PHP 클라이언트 :이 해결

$address = 'example.com'; // obviously not the address I am using 
$port = 9005; 
$message = "Test"; 

$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp')); 

socket_connect($socket, $address, $port) 

if(socket_send($socket, $message, strlen($message), MSG_EOF) != FALSE) 
{ 
    echo socket_read($socket, 14, PHP_NORMAL_READ); 
} 
+1

responseString = 명령 만들기 + "\ 연구 \ n" "MC2 그것은 작품을!"; – clevertension

+0

소켓이 데이터 전송을 완료했다는 것을 알 수있는 행의 EOF를 추가해야한다고 생각합니다. – clevertension

+0

예, 분명히 문제의 일부였습니다. 나는 질문을 제출 한 후 약 20 분 만에 그것을 전부 알아 냈다. 인생도 마찬가지입니다. – KayoticSully

답변

1

: 여기 내가 문제가 무엇인지 파악 솔루션입니다. 자바 서버에서 데이터를 읽을 때, 나는 하나의 덩어리 만 읽고 나머지는 모두 걸려 있었다. 모든 데이터를 얻기 위해서는 데이터를 루프에서 읽어야합니다.

또한 Java Server로 보내는 데이터가 새 행이나 캐리지 리턴으로 끝나지 않았습니다.

다음 다시 작성 PHP 클라이언트는 이제 모든 게 작동 + 잘

$address = 'minecraft.kayoticgamer.com'; 
$port = 9005; 

$socket = socket_create(AF_INET, SOCK_STREAM, getprotobyname('tcp')); 
socket_connect($socket, $address, $port); 

$message .= chr(10); 

$status = socket_sendto($socket, $message, strlen($message), MSG_EOF, $address, $port); 
if($status !== FALSE) 
{ 
    $message = ''; 
    $next = ''; 
    while ($next = socket_read($socket, 4096)) 
    { 
     $message .= $next; 
    } 

    echo $message; 
} 
else 
{ 
    echo "Failed"; 
} 

socket_close($socket); 
+0

안녕하세요 KayoticSully : 예제를 실행하려고합니다. 브라우저에서 계속로드가 표시되어 이미 완료 한 경우 도와주세요. –

관련 문제