Java套接字通信

时间:2013-09-24 16:08:35

标签: java sockets

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

我有两个程序,A和B. 带有套接字的控件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说“我这样做” - >一个 要么 输出流 - > B输入流-B输出流 - >输入流。 A有B输出流的问题 - >输入流。 outputstream必须通过另一个类的toString()方法(在B包中)发送字符串产品。

该程序是远程控制的计时器,A包具有控制器,B包具有查看器。 我通过套接字将A命令发送到B,但是我需要B“偶尔”向A发送一个当前时间的“报告”。

我不能在这里编写所有程序,它太“大”了。 如果您愿意,我可以向您发送包含所有文件的电子邮件。

0 个答案:

没有答案