java - 如何在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();
}
}
}
解决方案
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());
. . .
推荐阅读
- flutter - 在点击 TextFormField 后可见前缀文本,否则为空白
- ios - 有没有办法重写函数或函数的 .option?
- python - 我无法更新变量的值
- javascript - 如何让按钮出现在列表项旁边?
- swift - 如何从一个孩子(Firebase 数据库)Xcode 中读取数据
- tensorflow - TensorBoard 显示模型的不同指标
- java - 如何在java中添加到队列的开头
- javascript - 网络上的 TokBox 订阅者快照
- php - 在 Woocommerce 中下订单后,将自定义附件添加到管理员电子邮件通知
- python - hypercorn:客户端证书验证