赞
踩
flink开发时候,经常用socket作为source;使用linux/mac环境开发,可以在终端中开启 nc -l 9000(开启netcat程序,作为服务端,发送数据);但是如果使用window环境,就比较麻烦,因为window环境没有nc程序;因此,我们可以用 java编写一个nc程序,以便发送数据,供flink程序使用。
nc是netcat的缩写,有着网络界的瑞士军刀美誉。因为它短小精悍、功能实用,被设计为一个简单、可靠的网络工具。
public class NcServer { // 定义端口号 private static final int PORT = 9000; public static void main(String[] args) throws IOException { ServerSocket server = new ServerSocket(PORT); Socket socket = server.accept(); SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("[" + simpleDateFormat.format(new Date()) + "]" + socket.getInetAddress() + "已建立连接!"); //监控连接是否断开线程 new Thread(new CheckClientThread(socket)).start(); //输出流 OutputStream outputStream = socket.getOutputStream(); //控制台输入 Scanner in = new Scanner(System.in); while (true) { String str = in.nextLine() + "\n"; outputStream.write(str.getBytes()); outputStream.flush(); } } // 监控连接程序是否断开 线程类 static class CheckClientThread implements Runnable { private Socket socketClient; public CheckClientThread(Socket socketClient) { this.socketClient = socketClient; } @Override public void run() { while (true) { try { socketClient.sendUrgentData(0xFF); } catch (IOException e) { SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); System.out.println("[" + simpleDateFormat.format(new Date()) + "]" + socketClient.getInetAddress() + "连接已关闭!"); // 断开后退出程序 System.exit(0); } } } } }
public class SocketStreamTest { public static void main(String[] args) throws Exception { //获取执行环境 StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); //界面上指定参数(本地测试可以忽略,设置了默认值) final ParameterTool params = ParameterTool.fromArgs(args); String hostName = params.get("hostname", "localhost"); int port = params.getInt("port", 9000); //数据来源(获取sourceStream) DataStream<String> sourceStream = env.socketTextStream(hostName, port, "\n"); //数据去向(打印到控制台) sourceStream.print(); //执行 env.execute("SocketStreamTest"); } }
开启nc程序(上文中Java实现nc程序)
控制台无内容
开启flink socket流程序(上问中flink socket流程序)
查看nc程序控制台,是否建立连接
[2019-11-23 21:38:30]/127.0.0.1已建立连接!
nc程序显示连接后,控制台中模拟输入需要发送到数据
[2019-11-23 21:38:30]/127.0.0.1已建立连接!
hello flink
查看flink socket程序控制它,是否接收到
12> hello flink
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。