0

こんにちは、オブジェクトをサーバーに送信しようとしています。サーバーがそれを受信した後、サーバーから同じオブジェクトを取得し、クライアント出力で文字列として読み取ります。最初に送信されたメッセージは機能しているようですが、その後はすべて機能していません。コードは次のとおりです。

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


public class GUGLi {
    static Socket socket = null;
    static ObjectOutputStream out = null;
    static ObjectInputStream in = null;
    String host = "host";

       public static void main(String[] args) throws IOException {

    try {
        OpenPort();
        InfoSent();
        ReadInfo();



        String line;
        while ((line = in.toString()) != null) {
            System.out.println(line);
        }

    } catch (UnknownHostException e) {
        System.err.println("Don't know about host: " + "host");
        System.exit(1);
    } catch (IOException e) {
        System.err.println("Couldn't get I/O for "
                + "the connection to: " + "host");
        System.exit(1);
    in.close();
    socket.close();
    out.close();
     }
    }
public static void OpenPort() throws UnknownHostException, IOException{
        socket = new Socket ("host", 7879);
    }
public static void InfoSent()throws IOException {
            Student info = new Student (22, "Guglielmo", "Male",
                    "email", "#");
           out = new ObjectOutputStream(socket.getOutputStream());  
           out.writeObject(info);
           System.out.println("Sent: " + info);
           out.flush();
           }
 public static void ReadInfo()throws IOException {
         in = new ObjectInputStream(socket.getInputStream());


}
       }
4

2 に答える 2

1

line = in.toString()行を読みません。InputStreamを文字列表現に変換します。read メソッドを呼び出す必要があります。行を読みたい場合は、必要BufferedInputStream.readLine()です。ただし、同じソケットを介してオブジェクトを読み取っている場合は、ストリーム/リーダーの種類を混在させることはできないため、反対側で読み取りreadUTF()と書き込みを行う必要がありますwriteUTF()

于 2013-04-04T23:20:16.557 に答える
0

あなたが抱えている最初の問題は、@EJPによるsaisのように読み取りメソッドを呼び出していないことです。詳細については、彼の回答を参照してください。

編集: でデータを受信できないという情報を削除しましたInputStreamsocketあなたが別のクライアントに接続されていないと考えるのは間違っていString host = "host"ました。なぜなら、それがループバック アドレスに接続すると考えていたからです。データをあなたのInputStream.

それを解消するために、いくつかのチュートリアルを読むことをお勧めします。強力な基本を得るために、ソケットに関する Java チュートリアルをお勧めします。それはあなたが必要とするすべてを説明します。

于 2013-04-04T17:10:55.557 に答える