プログラムに問題があります。それを説明するために、例を使用します。
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 に送信する必要があります。
ここにすべてのプログラムを書くことはできません。「大きすぎる」ためです。必要に応じて、すべてのファイルをメールで送信できます。