我的程序有问题。为了解释它,我将使用一个示例:
我有两个程序,A 和 B。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 发送当前时间的“报告”。
我不能把所有的程序都写在这里,它太“大”了。如果你愿意,我可以给你发一封包含所有文件的电子邮件。