使用javax.net.ServerSocketFactory创建Socket出现 address in used异常
最近我开发了一个J2ee的项目,需要用Socket进行通信。整个项目的代码在我本地计算机上测试运行都没有问题,但只要部署到Linux服务器上就出现问题:望各位大侠给出点儿指教public class SocketThread implements Runnable {
private static ServerSocketFactory serverFactory;
private static ServerSocket server;
private static String spName;
private SimulateSPServerDVServerInteraction spdvi=SimulateSPServerDVServerInteraction.getInstance();
static{
serverFactory=ServerSocketFactory.getDefault();
try {
server=serverFactory.createServerSocket(9529);
} catch (IOException e) {
System.err.println("Create Socket Server Wrong:"+e.toString());
}
}
@Override
public void run() {
Socket req= null;
while (true) {
try {
req=server.accept();
} catch (IOException e) {
System.err.println("get Client request Wrong:"+e.toString());
return;
}
PspBindSocket bindSocket=new PspBindSocket();
bindSocket.setSocket(req);
bindSocket.setSpdvi(spdvi);
bindSocket.setSpName(spName);
Thread thread=new Thread(bindSocket);
thread.start();
}
}
public void setSpName(String spName) {
this.spName = spName;
}
public static ServerSocket getServer() {
return server;
}
}
public class PspBindSocket implements Runnable {
private Socket socket=null;
private PrintWriter writer=null;
private BufferedReader reader=null;
private SimulateSPServerDVServerInteraction spdvi ;
private String spName;
public void setSpdvi(SimulateSPServerDVServerInteraction spdvi) {
this.spdvi = spdvi;
}
public void setSpName(String spName) {
this.spName = spName;
}
public void setSocket(Socket socket) {
this.socket = socket;
try {
writer=new PrintWriter(socket.getOutputStream());
reader=new BufferedReader(new InputStreamReader(socket.getInputStream()));
} catch (IOException e) {
System.err.println("Get The IO Failed From Socket:"+e.getMessage());
}
}
@Override
public void run() {
if(writer==null || reader==null)
return;
try {
bindPspserver();
writer.flush();
} catch (Exception e) {
System.err.println("Bind Error:"+e.toString());
e.printStackTrace();
}finally{
writer.close();
try {
reader.close();
socket.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
private void bindPspserver() throws Exception {
此方法进行业务逻辑操作
}
} --------------------编程问答-------------------- 9529端口已经被占用了或系统还没有释放掉,看一下linux进程是否已经有个程序在跑了。
另外,还遇到过一种情况,总有人喜欢在webapp或deploy目录下把原来的版本改个名字做备份,这样就相当于同时部署了两套程序,这样就出问题了
补充:Java , Java EE