如果服务器打开到端口的连接但客户端没有发送任何东西会发生什么? (Java 服务器套接字)
What will happen if the server opens connection to port but the Client didn't send any thing? (Java Server Socket)
我正在使用 java 套接字将数据从客户端传输到我的服务器,用户必须单击一个按钮才能打开与特定端口的连接,客户端必须 运行 可执行 jar文件将数据发送到打开的端口,但在某些情况下,用户单击按钮然后出于某种原因关闭浏览器选项卡!
当他再次尝试点击按钮时,它给出
Address already in use: JVM_Bind
有什么办法可以克服这个问题吗?!
是否可以在使用端口之前终止端口上的任何进程?
我的服务器端 class 代码,以防有人需要检查:
class Server {
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream in = null;
public Server(Integer port) throws Exception {
try {
server = new ServerSocket(port);
JSFUtils.addFacesInformationMessage("Waiting for a Data...");
socket = server.accept();
JSFUtils.addFacesInformationMessage("Done");
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String line = in.readUTF();
System.out.println("Data Scaned >> " + line);
} catch (Exception i) {
i.printStackTrace();
} finally {
// close connection
if (socket != null)
socket.close();
if (in != null)
in.close();
}
}
}
最后我可以通过使用 server.setSoTimeout(10 * 1000);
来解决这个问题你可以用你想要的时间来设置超时时间..在指定的时间用完而没有客户端回答它会提高"SocketTimeoutException" 并且用户可以再次单击服务器端的按钮你可以用类似的方式实现这个逻辑
try {
server = new ServerSocket(port);
server.setSoTimeout(10 * 1000);
socket = server.accept();
JSFUtils.addFacesInformationMessage("Scan Completed Successfully");
// takes input from the client socket
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String line = in.readUTF();
} catch (Exception i) {
if (i instanceof SocketTimeoutException)
JSFUtils.addFacesErrorMessage("Scan Timeout, Please click Scan again!");
else
i.printStackTrace();
}
我正在使用 java 套接字将数据从客户端传输到我的服务器,用户必须单击一个按钮才能打开与特定端口的连接,客户端必须 运行 可执行 jar文件将数据发送到打开的端口,但在某些情况下,用户单击按钮然后出于某种原因关闭浏览器选项卡! 当他再次尝试点击按钮时,它给出
Address already in use: JVM_Bind
有什么办法可以克服这个问题吗?!
是否可以在使用端口之前终止端口上的任何进程?
我的服务器端 class 代码,以防有人需要检查:
class Server {
private Socket socket = null;
private ServerSocket server = null;
private DataInputStream in = null;
public Server(Integer port) throws Exception {
try {
server = new ServerSocket(port);
JSFUtils.addFacesInformationMessage("Waiting for a Data...");
socket = server.accept();
JSFUtils.addFacesInformationMessage("Done");
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String line = in.readUTF();
System.out.println("Data Scaned >> " + line);
} catch (Exception i) {
i.printStackTrace();
} finally {
// close connection
if (socket != null)
socket.close();
if (in != null)
in.close();
}
}
}
最后我可以通过使用 server.setSoTimeout(10 * 1000);
来解决这个问题你可以用你想要的时间来设置超时时间..在指定的时间用完而没有客户端回答它会提高"SocketTimeoutException" 并且用户可以再次单击服务器端的按钮你可以用类似的方式实现这个逻辑
try {
server = new ServerSocket(port);
server.setSoTimeout(10 * 1000);
socket = server.accept();
JSFUtils.addFacesInformationMessage("Scan Completed Successfully");
// takes input from the client socket
in = new DataInputStream(new BufferedInputStream(socket.getInputStream()));
String line = in.readUTF();
} catch (Exception i) {
if (i instanceof SocketTimeoutException)
JSFUtils.addFacesErrorMessage("Scan Timeout, Please click Scan again!");
else
i.printStackTrace();
}