【发布时间】:2013-07-03 23:36:24
【问题描述】:
我正在尝试在客户端和服务器之间进行简单的聊天或双向通信
我面临的问题是,如果我在任何一侧继续输入新文本,则不会显示...只有输入的第一个文本会显示。
服务器端和客户端都在从服务器端输入一次文本后退出。
Server
import java.net.*;
import java.io.*;
import java.util.Scanner;
public class Server {
ServerSocket server;
Socket s;
InputStream input;
OutputStream out;
Scanner in=new Scanner(System.in);
BufferedReader br;
PrintWriter pw;
String str1;
String str2;
public void create() throws Exception{
server=new ServerSocket(40000);
System.out.println("Begin :) Server");
s=server.accept();
input=s.getInputStream();
out=s.getOutputStream();
br=new BufferedReader(new InputStreamReader(input));
pw=new PrintWriter(out);
t1.start();
t2.start();
}
Thread t1=new Thread(new Runnable(){
@Override
public void run (){
str1=in.nextLine();
pw.println(str1);
pw.flush();
}
});
Thread t2=new Thread(new Runnable(){
@Override
public void run(){
try{
str2=br.readLine();
}catch(Exception e){}
System.out.println(str2);
}
});
public static void main(String[] args) throws Exception{
Server s=new Server();
s.create();
}
}
Client
import java.util.Scanner;
import java.net.*;
import java.io.*;
public class Client {
Socket s;
InputStream input;
OutputStream out;
BufferedReader br;
PrintWriter pw;
Scanner in;
String str1;
String str2;
public void create() throws Exception{
s=new Socket("localhost",40000);
System.out.println("Begin :) Client");
input=s.getInputStream();
out=s.getOutputStream();
br=new BufferedReader(new InputStreamReader(input));
pw=new PrintWriter(out);
in=new Scanner(System.in);
t1.start();
t2.start();
}
Thread t1=new Thread(new Runnable(){
@Override
public void run(){
str1=in.nextLine();
pw.println(str1);
pw.flush();
}
});
Thread t2=new Thread(new Runnable(){
@Override
public void run(){
try {
str2=br.readLine();
} catch (Exception e) {}
System.out.println(str2);
}
});
public static void main(String[] args) throws Exception {
Client c=new Client();
c.create();
}
}
有没有办法不使用线程实现2路通信?
【问题讨论】:
-
您应该在无限循环中等待消息,当您收到消息时然后生成一个线程来处理它。
-
嗨,线程 t1 和 t2 总是在运行,因此当流中的文本不会
t they read it from the stream and print it? also even if main thread terminates the threads t1 & t2 should nt 终止仪式?那么为什么在服务器和客户端中的每个条目之后整个程序都会终止?
标签: java client-server bufferedreader printwriter