服务器连结的问题,请高手指点。

bowlder 2001-07-19 08:51:42
当我第一次传递值true给startflag时,服务器建立端口,当我第二次传递false值给startflag时,提示java.lang.NullPointerException的错误,当我第三次递值true给startflag时,提示java.net.BindException: Address in use: bind,说明第二次没有将端口关闭,为什么,怎么关?请大虾指点一二。


class ServerSocketPort extends Thread
{
public ServerSocketPort(int p,boolean startflag)
{ port=p;
StartFlag=startflag;
}
public void run()
{ int i=1;
try
{
if (StartFlag)
{
s=new ServerSocket(port);
Socket incoming = s.accept();
//add handle
i++;
}
else
{
s.close();
}
sleep(5);
}
catch(Exception e)
{ System.out.println(e);
}
}
private int port;
private boolean StartFlag;
private ServerSocket s;
}
...全文
81 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
bowlder 2001-07-20
  • 打赏
  • 举报
回复
我明白了,谢谢!
knight_qmh 2001-07-19
  • 打赏
  • 举报
回复
还少了ht.remove()方法:
class ServerSocketPort extends Thread
{
public void set(int p,boolean startflag)
{
port=p;
StartFlag=startflag;
}
public void run()
{
int i=1;

while(true)
{
try
{
if (StartFlag)
{
if(ht!=null && !ht.contains(""+port))
{
s=new ServerSocket(port);
Socket incoming = s.accept();
ht.put(""+port,s);
//add handle
i++;
}
}
else
{
if(ht!=null && ht.contains(""+port))
{
s = (ServerSocket)ht.get(""+port);
s.close();
ht.remove(""+port);
}
}
sleep(5);
}
catch(Exception e)
{
System.out.println(e);
}
}
}
private Hashtable ht = new Hashtable();
private int port;
private boolean StartFlag;
private ServerSocket s;
}
knight_qmh 2001-07-19
  • 打赏
  • 举报
回复
因为你在构造器里传参数,而没有别的方法传参,也就是你每次都创建新的对象。
你第二次应该是new ServerSocketPort(port ,false);这样就重新创建了一个对象,而不是使用原来的(第一次创建的对象),所以ServerSocket s为空。
第三次new ServerSocketPort(port,true);一样重新创建对象,若port和原先创建的一样,也就是原先的ServerSocket没有关闭,出现你那样的错误。
解决方法如下:

使用一个对象,
ServerSocketPort ssp = new ServerSocketPort();
ssp.set(1024,true);
ssp.set(2048,false);
ssp.set(1024,false);
.......

class ServerSocketPort extends Thread
{
public void set(int p,boolean startflag)
{
port=p;
StartFlag=startflag;
}
public void run()
{
int i=1;

while(true)
{
try
{
if (StartFlag)
{
if(ht!=null && !ht.contains(""+port))
{
s=new ServerSocket(port);
Socket incoming = s.accept();
ht.put(""+port,s);
//add handle
i++;
}
}
else
{
if(ht!=null && ht.contains(""+port))
{
s = (ServerSocket)ht.get(""+port);
s.close();
}
}
sleep(5);
}
catch(Exception e)
{
System.out.println(e);
}
}
}
private Hashtable ht = new Hashtable();
private int port;
private boolean StartFlag;
private ServerSocket s;
}

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧