1

ネットワーク上の複数のコンピューター間でデータをやり取りする必要があるアプリケーションを作成しています。データの送信方法により、クライアント コンピュータはソケット サーバーを実行し、調整コンピュータはクライアント ソケットを実行します。

これらのソケットからの読み取りと書き込みをカプセル化することを目的とした単純なクラスを作成しました。ただし、受信ソケットは何も読み取る代わりに、何も出力しません。クライアントとサーバーの両方が接続されていることを確認しました。

以下のServerおよびClientクラスでは、Socketはデバッグ目的でのみ公開されています。

public class Server {
    public Socket client;
    private DataInputStream inStr;
    private PrintStream outStr;

    public Server() throws UnknownHostException, IOException {this("localhost");}
    public Server(String hostname) throws UnknownHostException, IOException {
        client = new Socket(hostname, 23);
        inStr = new DataInputStream(client.getInputStream());
        outStr = new PrintStream(client.getOutputStream());
    }

    public void send(String data) {outStr.print(data); outStr.flush();}
    public String recv() throws IOException {return inStr.readUTF();}
}

以下は私のものClientです:

public class Client {
    private ServerSocket serv;
    public Socket servSock;
    private DataInputStream inStr;
    private PrintStream outStr;

    public Client() throws IOException {
         serv = new ServerSocket(23);
         servSock = serv.accept();
         inStr = new DataInputStream(servSock.getInputStream());
         outStr = new PrintStream(servSock.getOutputStream());
    }

    public void send(String data) {outStr.print(data); outStr.flush();} 
    public String recv() throws IOException {return inStr.readUTF();}
}

Client クラスがインスタンス化され、プログラムが開始されます。次に、別のプログラムで、サーバーがインスタンス化されて開始されます。

Server s = new Server(); System.out.println(s.client.isConnected());  
while(true) {System.out.println(s.recv()); Thread.sleep(200);}

Client c = new Client(); System.out.println(c.servSock.isConnected()); 
while(true) {c.send("Hello World!"); Thread.sleep(200);}

isConnected()trueクライアントとサーバーの両方を返します。

何が原因でしょうか? 今までソケットを使用する必要はありませんでした。

4

1 に答える 1

2

DataInputStream.readUTF()最初の 2 バイトが読み取るバイト数であると想定しますがPrintStream.print(String)、文字列をバイトに変換してそのまま書き込みます。

DataOutputStream.writeUTF(String)readUTF()期待どおりの長さを書き込みます。

于 2013-04-17T04:36:07.503 に答える