0

クライアント.java

package Client;

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

class Client {
        /*
     To send string to server use "out.print(data)"
     To use info sent from server use "in.readLine()"
     */
    int port = 1234;
    String hostname = "localhost";
    String input,output;

    public void send(String text) {
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.print(text);                                   /*Writes to server*/

         skt.close();
         out.close();    /*Closes all*/
         in.close();
      }

      catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
      } 
    }
   public static void main(String args[]) {
     Client c = new Client();
     c.send("Server is online");    //sends message to server
   }
}

サーバー.java

package Server;

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

class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;

    public void send(String text) {
    try {
         ServerSocket srvr = new ServerSocket(port);
         Socket skt = srvr.accept();                    /*Waiting for Connection from client*/
         System.out.print("Server has connected!\n");

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.print(text);                                                  /*Write/Send to Client*/

          BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());

         out.close();
         in.close();
         skt.close();               /*Closes all*/
         srvr.close();
      } catch( Exception e) {
         System.out.print("Error Connecting\n");
      } 
    }

   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client

   }
}

Server has connected! サーバーとクライアントの両方から送信したときに、以外に何も起こらないのはなぜ ですか

s.send("X is online");

反対側で読み取ってコマンドで出力する必要があるのはどれですか?

(bufferreader が printwriter の後にアクティブ化され、それを取得しないためですか?もしそうなら、どうすればこれを修正できますか?)

4

3 に答える 3

3

改行BufferedReader#readLine文字を送信しない限り、通話は無期限にブロックされます。交換

out.print(text); 

out.println(text); 

BufferedReader#readLineクライアントとサーバーの両方からの呼び出しに一致します。

于 2013-03-30T17:43:04.050 に答える
2

1 つの可能性 - ここで順序を見てください。

 PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
 out.print(text);

 skt.close();
 out.close(); 

writerを閉じる前にソケットを閉じています。つまり、ライターにバッファリングされたデータがある場合、それを書き込む機会がありません。物事を閉じる順序を入れ替えてみてください -最後にソケットを閉じてください。

(通常、これらはfinallyブロックに含まれていますが、気をつけてください...)

編集:そして、サーバー側で行を印刷していないことに気付きました。両方の変更を行う必要があります。

于 2013-03-30T17:40:09.113 に答える
1
package client;

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

class Client {
        /*
     To send string to server use "out.print(data)"
     To use info sent from server use "in.readLine()"
     */
    int port = 1234;
    String hostname = "localhost";
    String input,output;

    public void send(String text) {
    try {
         Socket skt = new Socket(hostname, port);           /*Connects to server*/

         BufferedReader in = new BufferedReader(new
         InputStreamReader(skt.getInputStream()));          /*Reads from server*/
         System.out.println("Server:" + in.readLine());

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                   /*Writes to server*/
         out.close();    /*Closes all*/
         in.close();
         skt.close();

      }

      catch(Exception e) {
         System.out.print("Error Connecting to Server\n");
      } 
    }
   public static void main(String args[]) {
     Client c = new Client();
     c.send("Server is online");    //sends message to server
   }
}
package server;

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

class Server {
    /*
     To send string to client use "out.print(data)"
     To use info sent from client use "in.readLine()"
     */
        int port = 1234;
    String input,output;

    public void send(String text) {
    try {

        ServerSocket srvr = new ServerSocket(port);
         Socket skt = srvr.accept();                    /*Waiting for Connection from client*/
         System.out.println("Server has connected!\n");

         PrintWriter out = new PrintWriter(skt.getOutputStream(), true);
         out.println(text);                                                  /*Write/Send to Client*/

          BufferedReader in = new BufferedReader(new
            InputStreamReader(skt.getInputStream()));                   /*Read from Client*/
         System.out.println("Client:" + in.readLine());

       out.close();
         in.close();
         skt.close();              /*Closes all*/
        srvr.close();
      } catch( Exception e) {
         System.out.print("Error Connecting\n");
      } 
    }

   public static void main(String args[]) {
       Server s = new Server();
       s.send("Client is online");  //sends a message to client

   }
}

上記のコードは私のために働いています

于 2013-03-30T18:07:07.270 に答える