-1

我在这里有一项任务,我无法最终确定,也不确定哪种技术选择了我的问题。这是我的问题的解释。我的应用程序是独立的应用程序,将部署在不同的位置。可以说 LocA、LocB 等等。每个位置都有自己的客户端,一些客户端通过 LAN 连接,一些是第三方客户端。只要客户端通过局域网连接就没有请求和响应的问题。但是会有很少的客户端不通过局域网连接。

对于第三方客户,我们将提供 IP 和 PORT 以连接和请求标准 HL7 格式的数据。这里的问题是客户端可以使用任何技术创建自己的客户端程序。他们可能会使用 Socket 编程、.NET 套接字编程等。但是我们的服务器应该接受来自客户端的连接,无论它是什么技术,处理他们的请求并回复他们。并且要求服务器程序应该始终运行并监听分配的端口,或者每当有对特定端口的请求时,启动我们的服务器程序并处理客户端请求并响应客户端。

如果我的英语让你感到困惑,请原谅我。请给我一个解决我的问题的方法。

注意:客户端程序可以是任何技术和任何编程语言。这取决于客户他们想使用哪种方式与服务器连接并发送他们的请求。

4

3 回答 3

1

使用带有在客户端和服务器之间传递的序列化对象的 TCP 套接字连接。这是必需的,否则传输过来的信息将在翻译中丢失。使用此方法,您必须向客户端提供需求(序列化对象),以便程序可以相互通信。如果您使用(来自 java)套接字连接,它将能够接受端口上的任何传入 TCP 连接。

这是我所指的一个好主意

try
    {
        socket = new ServerSocket(portnum);
    }
    catch (IOException ioe)
    {
        output.append("IOException getting server socket\n" + ioe + "\n");
        return;
    }
    while (true)
    {
        try
        {
            client = socket.accept();
            output.append("Connected to client at " + client.getInetAddress());
            clientHandler(client);
        }
        catch (IOException ioe)
        {
            output.append("IOException during accept \n " + ioe + "\n");
            return;
        }
    }   

这将在端口“portnum”上接受任何 TCP 连接请求。

确保对您的应用程序进行多线程处理,否则在连接已建立时您将无法接受任何连接请求。

于 2012-06-26T02:11:00.310 回答
1

我在这里举一个小例子,客户端和服务器如何与 Socket 一起工作,我还包括服务器端的多线程。

客户端代码:

public class ClientWala {

    public static void main(String[] args) throws Exception{

        Boolean b = true;
    Socket s = new Socket("127.0.0.1", 4444);

    System.out.println("connected: "+s.isConnected());


    OutputStream output = s.getOutputStream();
    PrintWriter pw = new PrintWriter(output,true);

    // to write data to server
    while(b){

        if (!b){

             System.exit(0);
        }

        else {
            pw.write(new Scanner(System.in).nextLine());
        }
    }


    // to read data from server
    InputStream input   = s.getInputStream();
    InputStreamReader isr = new InputStreamReader(input);
    BufferedReader br = new BufferedReader(isr);
    String data = null;

    while ((data = br.readLine())!=null){

        // Print it using sysout, or do whatever you want with the incoming data from server

    }




    }
}

服务器端代码:

import java.io.*
import java.net.*;


public class ServerTest {

    ServerSocket s;

    public void go() {

        try {
            s = new ServerSocket(44457);

            while (true) {

                Socket incoming = s.accept();
                Thread t = new Thread(new MyCon(incoming));
                t.start();
            }
        } catch (IOException e) {

            e.printStackTrace();
        }

    }

    class MyCon implements Runnable {

        Socket incoming;

        public MyCon(Socket incoming) {

            this.incoming = incoming;
        }

        @Override
        public void run() {

            try {
                PrintWriter pw = new PrintWriter(incoming.getOutputStream(),
                        true);
                InputStreamReader isr = new InputStreamReader(
                        incoming.getInputStream());
                BufferedReader br = new BufferedReader(isr);
                String inp = null;

                boolean isDone = true;

                System.out.println("TYPE : BYE");
                System.out.println();
                while (isDone && ((inp = br.readLine()) != null)) {

                    System.out.println(inp);
                    if (inp.trim().equals("BYE")) {
                        System.out
                                .println("THANKS FOR CONNECTING...Bye for now");
                        isDone = false;
                        s.close();
                    }

                }
            } catch (IOException e) {
                // TODO Auto-generated catch block
                try {
                    s.close();
                } catch (IOException e1) {
                    // TODO Auto-generated catch block
                    e1.printStackTrace();
                }
                e.printStackTrace();
            }

        }

    }

    public static void main(String[] args) {

        new ServerTest().go();

    }

}
于 2012-06-26T03:02:29.770 回答
0

看到您提到 HL7,您可能应该看看 HAPI (http://hl7api.sourceforge.net/)它带有大量文档,包括发送和接收消息的示例

请注意,只要它们的 HL7 实现是兼容的,您的客户端程序使用什么技术并不重要。另外:套接字在没有 LAN 的情况下也能正常工作,因为 127.0.0.1(本地主机地址)始终可用。

于 2012-06-26T02:21:54.097 回答