2017-09-19 8 views
0

メッセージを送信すると、メッセージをループで実行した場合にのみ、サーバーによって出力されます。送受信でソケットエラーが発生する

1分後にメッセージを送信しようとしましたが、50回送信しましたが、サーバー側で何も印刷されませんでした。

私のエラーは何ですか?ここで

は、それがNetBeansで書かれた、私のコードです:

package me.jackboyplay.sockets_client; 

import java.io.DataInputStream; 
import java.io.IOException; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.concurrent.TimeUnit; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author JackboyPlay 
*/ 
public class Client { 

    public static void main(String[] args) throws IOException { 
     Socket socket = null; 
     try { 
      socket = new Socket("localhost", 5001); 
     } catch (IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     if(socket == null){ 
      return; 
     } 
     DataInputStream dis = null; 
     PrintWriter dos = null; 
     try { 
      dis = new DataInputStream(socket.getInputStream()); 
      dos = new PrintWriter(socket.getOutputStream()); 
     } catch (IOException ex) { 
      Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex); 
     } 
     int x = 0; 
     Long l = System.currentTimeMillis() + TimeUnit.SECONDS.toMillis(5); 
     for(int i = 0; i < 50; i++){ 
      dos.write("X: " + i); 
     } 
    } 

} 

package me.jackboyplay.jc_cloudsystem.mechaniken; 

import java.io.BufferedReader; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.io.PrintWriter; 
import java.net.Socket; 
import java.util.logging.Level; 
import java.util.logging.Logger; 

/** 
* 
* @author JackboyPlay 
*/ 
public class SocketClient extends Thread { 

    private Socket socket; 

    public SocketClient(Socket socket){ 
     this.socket = socket; 
     System.out.println("Ein Client wurde akzeptiert."); 
    } 

    @Override 
    public void run() { 
     BufferedReader br; 
     PrintWriter pw; 
     try { 
      br = new BufferedReader(new InputStreamReader(socket.getInputStream())); 
      pw = new PrintWriter(socket.getOutputStream()); 

      while(true){ 
       String line = br.readLine(); 
       System.out.println(line); 
      } 

     } catch (IOException ex) { 
      Logger.getLogger(SocketClient.class.getName()).log(Level.SEVERE, null, ex); 
     } 
    } 

} 

クラス1は、サーバーにメッセージを送信するクライアントです。

クラス2は、メッセージを印刷するサーバーです。返すことはありませんのでreadLine()

答えて

0

サーバがBufferedReader.readLine()を使用しているが、クライアントは任意の改行を送信していない:

は、テキストの行を読み込みます。行は、改行( '\ n')、復帰( '\ r')、改行の直後に続く改行のいずれかで終了すると見なされます。

クライアントはPrintWriter.write()の代わりにPrintWriter.println()を使用する必要があります。

は改行文字列を書き込むことによって、現在の行を終了します。行区切り文字列はシステムプロパティline.separatorによって定義され、必ずしも単一の改行文字( '\ n')である必要はありません。

dos.println("X: " + i); 

文字列を出力し、行を終了。このメソッドは、print(String)を呼び出すのと同様に動作し、次にprintln()を呼び出します。また

、必要に応じて値を書き込み、その後、完成したときにPrintWriter.println()を呼び出すためにPrintWriter.print()を使用します。

dos.print("X: "); 
dos.print(i); 
dos.println(); 

いずれかの方法を、あなたはまた、実際にワイヤ上で出力を送信するためにPrintWriter.flush()を呼び出す必要があります。

dos.flush(); 
+0

flush()を追加した後、 –

関連する問題