java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务器端如何知道?

java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务端如何实现在客户端发送数据的时候就能知道呢?并能立即取得这些数据呢?

如果是一对一的话,不要用到线程,相当于一个1对1的聊天。主要是这,你看下

try{t.setText("服务端开启,等待客户端连接");
ss=new ServerSocket(50000);

}catch(IOException e){
System.err.println("无法在50000端口建立监听服务");
System.exit(1);
}

try{ s=ss.accept();
fstart=true;
t.append("\n和来自"+s.getInetAddress()+"客户端连接成功!\n");
t.append("\n你现在可以通信了");
dis=new DataInputStream(s.getInputStream());
kehu[1]=dis.readUTF();
}catch(IOException e){
System.err.println("和客户端建立服务失败");
System.exit(1);
}

try{

while(true){
dis=new DataInputStream(s.getInputStream());
dos=new DataOutputStream(s.getOutputStream());
t.append("\n客户端1:"+dis.readUTF());

}

}catch(IOException e){

}

}
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-12-10
单独的读线程,有数据即时读出来
第2个回答  推荐于2018-04-12
public void start() throws IOException{
ServerSocket ss = new ServerSocket(9000);
while(true){
Socket s = ss.accept();
}
}

要用到线程的东西追问

我服务器端就是这么写的,现在客户端一直连着我的服务器,并且不定时给服务器发送数据,但是我服务器如何能知道他又给我发送数据了呢?用socket只有在客户端刚访问服务器端的时候能监听到,之后就监听不到了

追答

public void start() throws IOException{
ServerSocket ss = new ServerSocket(9000);
while(true){
Socket s = ss.accept();
new Agent(s).start();
}
}
class Agent extends Thread{
Socket s;
public Agent(Socket s) {
this.s = s;
}
public void run() {
try{
InputStream in = s.getInputStream();
OutputStream out = s.getOutputStream();
//向客户端发送, 先发生协议返回行,文本行
IOUtils.println(out, "text,1");//协议头
//发送消息内容, 一行文本消息
IOUtils.println(out, "欢迎使用FTP演示服务器!");
while(true){
//读取客户端发送到命令
String cmd = IOUtils.readLine(in).trim();
if("pwd".equals(cmd)){//显示当前目录
pwd(out);
}else if("ls".equals(cmd)){
ls(out);
}else if(cmd.startsWith("get ")){
get(cmd, out);
}else if("bye".equalsIgnoreCase(cmd)){
IOUtils.println(out, "text,1");
IOUtils.println(out, "Bye, Bye!");
s.close();
}else{
IOUtils.println(out, "text,1");
IOUtils.println(out, "只支持pwd,ls,get,bye!");
}
}
}catch(IOException e){
e.printStackTrace();
}
}
}

本回答被网友采纳
相似回答