首页 > 解决方案 > 如何在socket中实现后端接口通过前端输入消息?

问题描述

我想通过java socket实现全双工通信,可以通过前端页面输入信息。

双方通过socket建立连接后,前端可以调用url接口输入要发送的消息,但是现在我已经socket_send通过线程实现了后端的方法,只能在控制台。如果我要实现接口,socket_send方法需要ObjectOutputStream调用writeObject方法的类型,但是在接口中,我获取不到ObjectOutputStream.

我想知道如何socket_send通过前端页面在线程中输入我要发送的消息?

class Server_send implements Runnable{
private final Socket socket;
Server_send(Socket socket){
    this.socket=socket;
}
    @Override
    public void run() {
        try {
            ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
            while(true){
                System.out.print("Please input the msg to be sent:");
                Scanner sc = new Scanner(System.in);
                String str = sc.nextLine();
                JSONObject obj = new JSONObject();
                obj.put("type","chat");
                obj.put("msg",str);
                oos.writeObject(obj);
                oos.flush();
            }

        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

标签: javasockets

解决方案


ObjectOutputStream将尝试使用默认的 Java 序列化机制,除了 Java 本身,您不需要任何其他地方。如果你需要的话,最好的 JSON 序列化库是Jackson 。
尝试使用此模板:

  . . . 
  BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
  // Jackson's ObjectMapper is here
  bos.write(new ObjectMapper().writeValueAsBytes(msgObject));
  // also you can send plain strings
  bos.write("hello".getBytes());
  . . .

推荐阅读