Java套接字通信
我的程序有问题。 为了解释它,我将使用一个例子: 我有两个程序,A和B。 A使用套接字控制B,A使用客户端,B使用服务器 客户端代码:Java套接字通信,java,sockets,Java,Sockets,我的程序有问题。 为了解释它,我将使用一个例子: 我有两个程序,A和B。 A使用套接字控制B,A使用客户端,B使用服务器 客户端代码: package clientTimer; import java.io.*; import java.net.*; import javax.swing.JOptionPane; import java.net.*; import java.io.*; public class Client { private String actio
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()方法(在代码中,字符串称为“correct”)。
我不知道该怎么做。
带有toString方法的对象在包的另一个文件(查看器(字符串))中初始化
谢谢
编辑:
对不起,这对我来说有点难解释。
在一个简单的方案中,我需要的是:
A对->A说“做点什么”->B对->A说“我做那件事”
或
A outputstream->B inputstream-B outputstream->A inputstream。
A在B outputstream->A inputstream中有问题。
outputstream必须通过另一个类(在B包中)的toString()方法发送字符串产品
该程序是一个远程控制的定时器,a包有控制器,B包有查看器。
我通过套接字向B发送A命令,但我需要B“偶尔”向A发送带有当前时间的“报告”
我不能在这里写所有的程序,它太大了。
如果您愿意,我可以向您发送一封包含所有文件的电子邮件。不清楚您所说的“服务器必须发送toString()方法”是什么意思,通信由数据组成。不要在其他服务中保存代码,请将相关部分复制到您的问题中。问题有点不清楚。然而,我可以补充到讨论中的是,当我需要通过套接字传递对象时,我使用
ObjectInputStream
和ObjectOutputStream
使用可序列化对象。另一个选择是RMI,但我也不确定你想要实现什么。如果你能把所有特定于应用程序的东西都拿出来,把问题归结为一个简单的例子来说明你想要做什么,那将非常有帮助。(同时使您的代码更容易在本地显示,而不是在pastebin上显示。听起来发送和接收不是问题。您是说服务器无法访问某个对象,但它希望发送有关该对象的数据。此外,您还谈到了“包”但是为什么仅仅因为对象在不同的包中,类就不能访问该对象呢?