套接字连接不适用于可执行 jar
Socket connection doesn't work from executable jar
我有一个侦听特定 UDP 端口并通过它接收数据的应用程序。
当我通过 eclipse 运行 它时,我能够接收数据,无论我是从同一台机器上 运行ning 的应用程序接收数据(发送到本地主机)还是从远程机器(使用相同的发送应用程序)。
但是,当我生成一个可执行 jar 并尝试 运行 它时,当发送应用程序在同一台机器上(发送到本地主机)时,它只会 运行s。
这是我用来监听传入数据的代码:
public class listenToPort implements Runnable{
ByteArrayOutputStream mainBAOS = new ByteArrayOutputStream();
@Override
public void run() {
DatagramSocket Socket = null;
try {
Socket = new DatagramSocket(5000);
Socket.setSoTimeout(10000);
byte[] Input = new byte [571];
while(true) {
DatagramPacket Packet = new DatagramPacket(Input, Input.length);
Socket.receive(Packet);
byte[] data = new byte[Packet.getLength()];
System.arraycopy(Packet.getData(), 0, data, 0, Packet.getLength());
try {
synchronized (this){
mainBAOS.write(data);
}
} catch(IOException ex) {ex.printStackTrace();}
Thread.sleep(5);
}
}
catch (SocketTimeoutException ex) {System.out.println("No incoming data from socket, socket closed");}
catch(IOException ex) {ex.printStackTrace();}
catch (InterruptedException ex) {ex.printStackTrace();}
finally{
Socket.close();
}
}
}
造成这种奇怪行为的原因可能是什么?
关于如何解决它的任何想法?
感谢您的帮助。
我应该补充一点,程序不会抛出任何错误或类似的东西,它只是不会通过套接字接收任何数据。
很可能是防火墙问题。很可能只有当应用程序 运行 使用 Eclipse 时,防火墙才接受给定端口上的连接。
尝试停用它(如果合理的话)看看它是否能解决您的问题!
我有一个侦听特定 UDP 端口并通过它接收数据的应用程序。 当我通过 eclipse 运行 它时,我能够接收数据,无论我是从同一台机器上 运行ning 的应用程序接收数据(发送到本地主机)还是从远程机器(使用相同的发送应用程序)。 但是,当我生成一个可执行 jar 并尝试 运行 它时,当发送应用程序在同一台机器上(发送到本地主机)时,它只会 运行s。
这是我用来监听传入数据的代码:
public class listenToPort implements Runnable{
ByteArrayOutputStream mainBAOS = new ByteArrayOutputStream();
@Override
public void run() {
DatagramSocket Socket = null;
try {
Socket = new DatagramSocket(5000);
Socket.setSoTimeout(10000);
byte[] Input = new byte [571];
while(true) {
DatagramPacket Packet = new DatagramPacket(Input, Input.length);
Socket.receive(Packet);
byte[] data = new byte[Packet.getLength()];
System.arraycopy(Packet.getData(), 0, data, 0, Packet.getLength());
try {
synchronized (this){
mainBAOS.write(data);
}
} catch(IOException ex) {ex.printStackTrace();}
Thread.sleep(5);
}
}
catch (SocketTimeoutException ex) {System.out.println("No incoming data from socket, socket closed");}
catch(IOException ex) {ex.printStackTrace();}
catch (InterruptedException ex) {ex.printStackTrace();}
finally{
Socket.close();
}
}
}
造成这种奇怪行为的原因可能是什么? 关于如何解决它的任何想法? 感谢您的帮助。
我应该补充一点,程序不会抛出任何错误或类似的东西,它只是不会通过套接字接收任何数据。
很可能是防火墙问题。很可能只有当应用程序 运行 使用 Eclipse 时,防火墙才接受给定端口上的连接。
尝试停用它(如果合理的话)看看它是否能解决您的问题!