gpt4 book ai didi

java - 如何使用 Java 正确地从套接字流式传输数据

转载 作者:可可西里 更新时间:2023-11-01 02:46:09 24 4
gpt4 key购买 nike

我正在尝试使用 Java 通过套接字流式传输数据,以尝试编写 Kafka 生产者。我已经编写了一个类来提取数据,但没有得到我期望的结果。我已经设置好了,所以数据正在从 Linux 机器中流式传输。数据源是一个 csv 文件,我正在使用 nc 实用程序进行流式传输。该类(class)在 Eclipse 的 Windows 10 机器上运行。当我上课时,我看到了两件奇怪的事情。

  1. 不会传输列标题。
  2. 我只能上课一次。如果我想再次运行它,我必须停止 nc 并重新启动它。

下面是我的代码。我错过了什么吗?此时我只是尝试连接到套接字并将数据拉过来。

我使用以下命令运行 nc:$ nc -kl 9999 < uber_data.csv

下面是我的课

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

public class Client
{
static String userInput;

public static void main(String [] args)
{

try
{
InetAddress serverAddress = InetAddress.getByName("servername");
Socket socket = new Socket(serverAddress, 9999);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));

while ((userInput = input.readLine()) != null) {
System.out.println(input.readLine());
}

input.close();
socket.close();

}
catch(UnknownHostException e1)
{
System.out.println("Unknown host exception " + e1.toString());
}
catch(IOException e2)
{
System.out.println("IOException " + e2.toString());
}
catch(IllegalArgumentException e3)
{
System.out.println("Illegal Argument Exception " + e3.toString());
}
catch(Exception e4)
{
System.out.println("Other exceptions " + e4.toString());
}
}
}

最佳答案

您将丢弃所有奇数行。应该是:

while ((userInput = input.readLine()) != null) {
System.out.println(userInput);
}

其次,您没有关闭套接字。使用资源尝试:

try
{
InetAddress serverAddress = InetAddress.getByName("servername");
try (
Socket socket = new Socket(serverAddress, 9999);
BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream()));
) {
while ((userInput = input.readLine()) != null) {
System.out.println(input.readLine());
}
}
}
catch (...)

关于java - 如何使用 Java 正确地从套接字流式传输数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43381255/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com