java在客户端打开一个套接字

标签 java sockets listener

我不明白为什么我的客户端套接字总是陷入 IOException。 当它陷入 IOException 时,我重新创建我的套接字,因此它将再次工作,直到它再次陷入异常,依此类推......

代码应该始终从我的电气装置中读出 IP Controller 。我无法更改服务器端的任何内容。我连接到它,当发生某些情况时,它会将其发布到端口,我希望能够读取它。

这是打开套接字代码

    public KnxController(){
    try{
        System.out.println("Server started");
        clientSocket = new Socket(IP, PORT);
        outToServer = new DataOutputStream(clientSocket.getOutputStream());
    } catch (UnknownHostException e) {
        System.out.println("UnknownHostException: kan knx niet vinden");
    } catch (IOException e) {
        System.out.println("IOException knxcontroller: kan geen data sturen");
    }

这里我读出了数据

        while(true){
        try {
            DataInputStream din=new DataInputStream(knxC.clientSocket.getInputStream()); 
            BufferedReader br = new BufferedReader(new InputStreamReader(din));
            String[] str=br.readLine().split("");  
            System.out.println(Arrays.toString(str));

        } catch (IOException e) {
            try {
                knxC.clientSocket = new Socket(knxC.IP, knxC.PORT);
            } catch (UnknownHostException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
        } catch(NullPointerException nex){
            try {
                knxC.clientSocket = new Socket(knxC.IP, knxC.PORT);
            } catch (UnknownHostException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }       
    }

它可以工作,但距离良好的编码还很远。 任何有关如何解决此问题的帮助将不胜感激。

最佳答案

为感兴趣的人清理了上面的代码

打开套接字

    public KnxController(){
    do{
        setClientSocket();

        try {
            outToServer = new DataOutputStream(clientSocket.getOutputStream());
        } catch (IOException e) {
            log.error("IOException knxcontroller: kan geen data out stream starten naar knx");
        } catch (NullPointerException nEx){
            log.error("NullPointerException knxcontroller: geen knx host");
        }
    }while(clientSocket == null);

    KnxSocketListener knxL = new KnxSocketListener("KnxSocketListener", this);
    knxL.start();
}

    public void setClientSocket() {
    try {
        this.clientSocket = new Socket(IP, PORT);
    } catch (UnknownHostException e) {
        log.error("UnknownHostException: kan geen socket opbouwen met knx host");
    } catch (IOException e) {
        log.error("IOException: kan geen socket opbouwen met knx host");
    }
}

新线程公共(public)类KnxSocketListener中的socketlistener

public KnxSocketListener(String name, KnxController knxC) {
      threadName = name;
      System.out.println("Creating " +  threadName );
      this.knxC = knxC;
}

public void start () {
      System.out.println("Starting " +  threadName );
      if (t == null) {
         t = new Thread (this, threadName);
         t.start ();
      }
}   

public void run()
{
    while(true){
        try {
            DataInputStream din = new DataInputStream(knxC.getClientSocket().getInputStream()); 
            BufferedReader br = new BufferedReader(new InputStreamReader(din));
            String[] str=br.readLine().split("");  
            System.out.println(Arrays.toString(str));
        } catch (IOException e) {
            knxC.setClientSocket();
        } catch(NullPointerException nex){
            knxC.setClientSocket();
        }       
    }
}

关于java在客户端打开一个套接字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41016742/

相关文章:

java - 在自动完成中隐藏键盘

java - Java 中的往返时间字符串太长?

python - Windows 上 select.select() 的问题

java - 读取动态生成的微调器的值 - 如何执行此操作?

android - onKeyListener 不适用于软键盘(Android)

java编辑器和代码折叠

java - JVM 加载重复库

sockets - golang 获取udp套接字缓冲区大小

c - DNS 查询结构

java.lang.ClassNotFoundException : com. 太阳.faces.config.ConfigureListener