0

プログラムに問題があります。それを説明するために、例を使用します。

A と B の 2 つのプログラムがあります。A は B をソケットで制御し、A はクライアントを持ち、B はサーバーを持ちます。

A クライアント コード:

package clientTimer;

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

import javax.swing.JOptionPane;


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

public class Client {
        private String action;
        private String ip;

        public Client(String action,String ip) {
                this.action=action;
                this.ip=ip;
                String serverName = "server";
                int port = 9999;
                try {
                        Socket client = new Socket(ip, port);
                        OutputStream outToServer = client.getOutputStream();
                        DataOutputStream out = new DataOutputStream(outToServer);
                        out.writeUTF(action);
                        InputStream inFromServer = client.getInputStream();
                        DataInputStream in =new DataInputStream(inFromServer);
                        new Countdown(in.readUTF(),true);
                        client.close();
                }catch(IOException e) {
                        e.printStackTrace();
                }
        }
}

B サーバー コード:

package serverTimer;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketException;

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

public class Server extends Thread {
   private String correct;

   public Server() {
       run();
   }


   public void run() {
           correct="q";
         try {
            ServerSocket serverSocket = new ServerSocket(9999);
            while(true) {
              Socket server = serverSocket.accept();
              DataInputStream in = new DataInputStream(server.getInputStream());
              new Viewer(in.readUTF());
              DataOutputStream out = new DataOutputStream(server.getOutputStream());
              if (correct.length()==5) {
                  out.writeUTF(correct);
              } else {
                  out.writeUTF("a");
              }
              server.close();
           }
         }catch(SocketTimeoutException s) {
            System.out.println("Socket timed out!");
         }catch(IOException e) {
            e.printStackTrace();
         }
   }
}

ご覧のとおり、クライアントはサーバーと同じように文字列を送受信します。私の問題は、サーバーが同じパッケージ内のオブジェクトの toString() メソッド (コードでは「正しい」と呼ばれる) をクライアントに送信する必要があることです。どうすればいいのかわかりません。toString メソッドを持つオブジェクトは、パッケージの別のファイル (Viewer(String)) で初期化されます。

ありがとう。

編集:申し訳ありませんが、説明するのは少し難しいです。私が必要とする単純なスキームでは、Aが「何かをする」と言う-> Bが「私はそれをする」と言う-> AまたはA出力ストリーム-> B入力ストリーム-B出力ストリーム-> A入力ストリーム. A は B の出力ストリーム -> A の入力ストリームに問題があります。出力ストリームは、別のクラス (B パッケージ内) の toString() メソッドによって文字列積を送信する必要があります。

プログラムは遠隔操作のタイマーで、Aパッケージにはコントローラー、Bパッケージにはビューアーが付いています。ソケット経由で A コマンドを B に送信しますが、B が現在の時刻を含む「レポート」を「時々」A に送信する必要があります。

ここにすべてのプログラムを書くことはできません。「大きすぎる」ためです。必要に応じて、すべてのファイルをメールで送信できます。

4

0 に答える 0