Java套接字通信

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

我的程序有问题。 为了解释它,我将使用一个例子:

我有两个程序,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 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上显示。听起来发送和接收不是问题。您是说服务器无法访问某个对象,但它希望发送有关该对象的数据。此外,您还谈到了“包”但是为什么仅仅因为对象在不同的包中,类就不能访问该对象呢?