gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 09:09:19 25 4
gpt4 key购买 nike

我不明白为什么我的客户端套接字总是陷入 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/

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