这是我程序的服务器端代码,问题是,它接受一个客户端。当连接另一个客户端时,isConnected方法返回true,但服务器不从服务器获取消息。请帮助我,因为这是我在netbeans中的第一个java程序,我刚学完核心java。
class Conn extends Thread{
ServerSocket ss;
Socket s;
public void run()
{
status.setText(status.getText()+"connecting");
try{
while(true)
{
s=new Socket();
ss=new ServerSocket(3000);
s=ss.accept();
Read r=new Read(s);
r.start();
}
}catch(Exception e){}
}
}
class Read extends Thread{
DataInputStream inp;
PrintStream outp;
String str;
Read(Socket s)
{
try{
inp=new DataInputStream(s.getInputStream());
outp=new PrintStream(s.getOutputStream());
}catch(Exception sd){}
}
public void run()
{
status.setText(status.getText()+"\nreading");
try{
while(true)
{
str=inp.readLine();
chatwin.append(str);
outp.println(str);
}
}catch(Exception er){}
}
}
答案 0 :(得分:4)
在分配ss后移动while逻辑。
try
{
ss = new ServerSocket(3000);
while (ss.isBound())
{
s=ss.accept();
Read r = new Read(s);
r.start();
}
}
你的问题是你不能多次这样做:
ss = new ServerSocket(3000);
您已经创建了一个位于端口ServerSocket
的{{1}},所以当您尝试创建另一个时,它会尝试将自己绑定到该套接字,并且因为您的第一个而未成功3000
仍然坐在那里。您应该只创建一个ss
并在线程连接到ServerSocket
时从那个ServerSocket
获取套接字连接。
这会回答你的问题吗?
答案 1 :(得分:0)
ss.accept()将阻塞,直到收到连接。你是如何与它连接的?