【问题标题】:how to establish connections between a servlet and a socket如何在 servlet 和套接字之间建立连接
【发布时间】:2014-04-24 15:11:43
【问题描述】:

假设我有一个 servlet 读取文件并将其写入套接字,并且我想在 servlet 和套接字之间建立连接,该怎么做?

嗯,对于一个套接字,我在某处读到一个只需要这样做的地方:

URL url  = new URL("http://example.com/getFile");
URLConnection con = url.openConnection();
con.setDoOutput(true);

我怎样才能对 servlet 做同样的事情?

我想这样做是因为我将在 servlet 和 scoket 之间发送和接收文件。另外,他们如何知道对方何时发送了文件并应该阅读它?

我已经搜索过这个,但找不到任何解释它的网站。

【问题讨论】:

    标签: java servlets websocket


    【解决方案1】:

    我不确定您所说的“套接字”是什么意思。如果套接字是标准协议 (http/https/ftp),那么您可以在 Servlet 中使用上述代码,就像在独立程序中使用一样。
    如果您的套接字没有规定任何标准,那么您可能希望使用以下代码打开直接连接:

    Socket socket = new Socket(server,port);
    //Get an input stream from the socket
    BufferedReader inputStream = 
         new BufferedReader(new InputStreamReader(
                         socket.getInputStream()));
    
    //Get  an output stream to the socket.  Note
    // that this stream will autoflush.
    PrintWriter outputStream = 
         new PrintWriter(new OutputStreamWriter(
                   socket.getOutputStream()),true);
    outputStream.println("send_ data");
          System.out.println(inputStream.readLine());
          socket.close();
    

    关于文件发送代码,如果涉及的主要任务是文件传输,您可以使用 FTP 协议在 servlet 和套接字之间发送文件。
    您可以在套接字端有一个文件观察程序,以了解何时传输文件。更多信息请参考filewatcherftp

    【讨论】:

    • 感谢您的回复。我想要做的是从套接字中获取一个文件,然后通过将其作为表单发送到浏览器来修改它。浏览器填写表单并发送回 servlet,然后将返回的输入发送到套接字。套接字修改这些值并发送回 servlet。有点像这样的 ..
    • 这个“套接字”是用 Java 编写的吗?以及为什么你只想实现一个套接字或者这只是一个通用的想法?
    • servlet 1: www.example.servlet1 servlet 2: www.example.servlet2 .servlet 1 必须将表单作为响应发送到浏览器。此表单包含用户名。当它发送到浏览器时,客户端会修改这个用户名,并通过单击发送按钮,将新值发送回 servlet 1。现在,servlet1 将这个修改后的用户名发送给 servlet 2,servlet 2 也修改它并发送回 servlet 1 .我的问题是:有没有办法可以在两个servlet之间建立连续的连接,我怎么知道servlet2已经完成了对文件的修改,以便servlet1可以再次得到它?
    • 它将用 java 编写,我已经添加了更多关于我打算通过这样做来实现什么的信息。
    • 好的。我得到它。那么上面的代码稍作修改就可以了。我在URL url = new URL("http://example.servlet2"); HttpURLConnection httpConn = (HttpURLConnection)url.openConnection(); if(httpConn.getResponseCode()==HttpURLConnection.HTTP_OK) { InputStream is = httpConn.getInputStream(); //read the is } 下面提供了它上面的调用是阻塞的。这意味着当 servlet1 将调用 servlet2 时,它不会完成,直到 servlet2 成功完成或抛出错误。因此,如果控制进入 if 块,则它已被处理。
    【解决方案2】:

    你混淆了它看起来像的 servlet 和套接字。区别如下:

    • 套接字用于网络中两点之间的低级通信。低级我的意思是你基本上通过套接字发送你想要的任何二进制数据并接收一些数据。为了建立连接,应该有一个ServerSocket 等待连接和与服务器套接字建立连接的客户端套接字。
    • Servlet 是 J2EE 抽象。 Servets 用于 Web 应用程序容器,并且在某些协议(在大多数情况下为 HTTP)之上工作。尽管 Web 服务器在内部使用套接字,但 Servlet 不能使用套接字。 Servlet 使用 RequestResponse 对象。您的 servlet 负责处理用户请求并形成响应。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-09-11
      • 1970-01-01
      • 2017-02-07
      • 1970-01-01
      • 2021-11-07
      相关资源
      最近更新 更多