用JAVA实现nc指令发送消息

用JAVA实现nc指令发送消息

本人最近遇到一个问题需要用java向SparkStreaming发送消息,但是SparkStreaming无法直接与java建立Socket连接,只能监听某台服务器的某个端口。所以需要让java实现一个类似“nc -lk 端口号”地方法。

  • 该方法无法单独运行,需要与监听的方法配合运行
  • 1 先启动监听方法,例如SparkStreaming 接收TCP数据的服务
  • 2 调用sendTCP(string) 发送字符串消息
  • 3 查看监听程序是否获取到了发送的消息
  • 此方法还存在一个问题,发送的数据量比较大时(比如一个大约10Kb的字符串时)接听程序可能无法一次性接收。

源代码

import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class JavaNCsend{

public static void sendTCP(String sendStr){
    int port = 8919;
    try {
        ServerSocket server = new ServerSocket(port);
        Socket client = server.accept();

        System.out.println(client.getInetAddress() + "已建立连接!");
        // 输入流
        InputStream is = client.getInputStream();
        BufferedReader bri = new BufferedReader(new InputStreamReader(is));
        // 输出流
        OutputStream os = client.getOutputStream();

        PrintWriter pw = new PrintWriter(os);
        // PrintWriter把数据写到目的地
        pw.print(sendStr);
        //关闭资源
        is.close();
        bri.close();
        os.close();
        pw.close();
        client.close();
        server.close();
        System.out.println("send success! The length:" + sendStr.length());
    } catch (Exception e) {
        System.out.println("connection exit!");
        System.out.println();
    } finally {

    }
}

public static void main(String args[]) {
    sendTCP("Hi,hello world! How about you?");
}

}

参考文章

[ java简易版 nc ]
[ Spark Streaming:TCP(基本类型)数据源 ]
[ spark streaming是怎么接受socket数据 ]

本人暂时没有考虑该方法的并发量和资源消耗

你可能感兴趣的:(Java)