【问题标题】:Java close TCP/IP connectionJava 关闭 TCP/IP 连接
【发布时间】:2012-04-12 13:33:50
【问题描述】:

我需要一个 java 程序从 Web 服务器下载一系列文件,并且我需要能够关闭然后重新打开每个文件下载之间的 tcp/ip 连接。

不知道该怎么做。

【问题讨论】:

标签: java tcp-ip


【解决方案1】:

您可以为要发送到的 IP 和端口创建 Socket,然后使用 FileInputStream 将文件读入字节数组并通过 DataOutPutStream 发送该字节数组,然后完成后刷新 dataOutPutStream 并关闭 Socket 并再次调用该函数发送下一个文件。

【讨论】:

    【解决方案2】:

    这是一种从套接字 80 (http) 检索任何信息的低级方法,通常用于检索邮件、执行“telnet”等:

    socket = new Socket();
    socket.connect(new InetSocketAddress(host, port));
    reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
    writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
    

    现在调用检索页面、发送 get 命令、设置内容类型并发送两个“\n”。

    有一个更高级别的解决方案: Send HTTP GET request with header

    【讨论】:

    • 谢谢。这就是我要找的。感谢您的快速响应。
    • 只是一个后续问题。一旦我关闭套接字并尝试再次使用它 (socket.connect(new InetSocketAddress(host,80));) 我收到 java.net.SocketException: Socket is closed 错误。我似乎无法重新打开它。所以我只是声明了 Socket socket = new Socket();,Socket socket2 = new Socket(); 等等......我在代码中得到了多少文件。这是正确的方法还是我可以重新打开我以某种方式关闭的套接字?
    • 我已经有一段时间没有像这样编码了,但据我所知,这段代码的目的是进行无状态调用(即,获取数据,然后关闭流和套接字)并结束程序(我忽略了)。要进行多个 http 调用,您可以创建 1. 一个套接字对象和 2. 一个 InetSocketAddress 对象。然后对于每次调用,只需修改 InetSocketAddress 的字段(通过对其调用一些 set 方法),创建一个新的读取器和写入器,获取页面,然后执行关闭语句。
    • 这就是我的想法,也就是将套接字创建放在它自己的方法中,并为每个文件 GET 调用该方法。谢谢。
    【解决方案3】:

    使用逻辑: 请发布您尝试过的内容。

     do{
          connection.open;
          while(!eof){
          fetchfiles();
          }
         connection.close;
         }while(no of files yet to download);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-19
      • 2011-05-19
      • 2012-11-09
      • 1970-01-01
      • 2017-05-24
      • 2012-01-12
      • 2018-08-29
      • 2013-09-04
      相关资源
      最近更新 更多