java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务器端如何知道? 5
java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务端如何实现在客户端发送数据的时候就能知道呢?并能立即取得这些数据呢?...
java中客户端用socket连接上服务端之后一直没有断开,不定时给服务端发送数据,服务端如何实现在客户端发送数据的时候就能知道呢?并能立即取得这些数据呢?
展开
3个回答
展开全部
如果是一对一的话,不要用到线程,相当于一个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){
}
}
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){
}
}
2013-12-10
展开全部
单独的读线程,有数据即时读出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
public void start() throws IOException{
ServerSocket ss = new ServerSocket(9000);
while(true){
Socket s = ss.accept();
}
}
要用到线程的东西
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();
}
}
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询