当前位置:编程学习 > JAVA >>

使用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
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,