Java中Server的线程问题 使用两线程一个用来读取客户端的数据一个用来转发客户端数据给所有客户端,为什么在客户端输入第一次数据时候只能进行客户端的读取而进行第二次数据发送诗只能进行客户端所有发送,并按此循环 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你这个代码不全 看不出什么 只有两个读取数据的操作不过可以给你讲一下这个思路socket BIO 读写都是阻塞的 所以只能读只能写应该就懂了 一般 读写操作会分为两个线程来处理 一个线程只读 一个线程只写所以 client跟server至少需要四个线程来处理才能完成整个的读写交流操作 在底下写个ClientHandler 里面写上线程操作 然后转发处理 开启服务器后端后,调用服务器端的线程,客户端连接后,直接发送消息到服务器端,服务器端跳转到线程服务器端执行直接给你上代码//服务器端ServerSocket serverSocket=new ServerSocket(8888); System.out.println("服务器已开启,等待连接......"); while(true){ socket=serverSocket.accept(); ConnectSocketServer thread=new ConnectSocketServer(socket); thread.start();//线程@Override public void run() { try { System.out.println(socket.getInetAddress().getHostName()+"已连接"); InputStream inputStream=socket.getInputStream(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream)); System.out.println(socket.getInetAddress().getHostName()+"给你发来消息:"+bufferedReader.readLine()); socket.shutdownInput(); Scanner scanner=new Scanner(System.in); System.out.print("请回复消息:"); String message=scanner.next(); OutputStream outputStream=socket.getOutputStream(); byte [] b=message.getBytes(); outputStream.write(b); outputStream.flush();}//客户端socket=new Socket("192.168.0.2", 8888); outputStream=socket.getOutputStream(); System.out.print("请输入文本:"); String message=scanner.next(); //String message=""; byte [] b=message.getBytes(); outputStream.write(b); outputStream.flush(); socket.shutdownOutput(); InputStream is=socket.getInputStream(); BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is)); System.out.println(bufferedReader.readLine()); Java 网络编程 之 TCPhttp://www.verejava.com/?id=16994896966324 //线程@Overridepublic void run() {try {System.out.println(socket.getInetAddress().getHostName()+"已连接");InputStream inputStream=socket.getInputStream();BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));System.out.println(socket.getInetAddress().getHostName()+"给你发来消息:"+bufferedReader.readLine());socket.shutdownInput();Scanner scanner=new Scanner(System.in);System.out.print("请回复消息:");String message=scanner.next(); //这里是阻塞的 所以你服务器收到消息之后只能在这里等着 等你打完字之后再回执行之后的代码OutputStream outputStream=socket.getOutputStream();byte [] b=message.getBytes();outputStream.write(b);outputStream.flush();}最后 读取操作也是阻塞的 只有当客户端发来消息之后再回执行之后的代码然后收不到消息的时候 就无法执行之后的输入操作 也就无法发送信息。反之亦然 所以 最终导致 你只能发一次信息收一次信息才能走下一个回合 一个菜鸟的问题,请虾米们帮帮忙 请问正则表达式可以进行字符串的检索吗 用JAVA怎样调用SQL的存储过程\视图? 找书 uploadify上传bug struts问题,bean:write怎末换行? 关于RMI问题,不得到答案不罢休,帮帮忙,各路神仙,看在明天9.18的份上 帮忙看这段程序那里有错误??谢谢 rmi 注册问题 applet多级panel大小刷新问题 有一个算法题请大佬指点! 求教各位大神关于Java g2d绘图的问题
//服务器端
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("服务器已开启,等待连接......");
while(true){
socket=serverSocket.accept();
ConnectSocketServer thread=new ConnectSocketServer(socket);
thread.start();
//线程
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostName()+"已连接");
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
System.out.println(socket.getInetAddress().getHostName()+"给你发来消息:"+bufferedReader.readLine());
socket.shutdownInput();
Scanner scanner=new Scanner(System.in);
System.out.print("请回复消息:");
String message=scanner.next();
OutputStream outputStream=socket.getOutputStream();
byte [] b=message.getBytes();
outputStream.write(b);
outputStream.flush();
}
//客户端
socket=new Socket("192.168.0.2", 8888);
outputStream=socket.getOutputStream();
System.out.print("请输入文本:");
String message=scanner.next();
//String message="";
byte [] b=message.getBytes();
outputStream.write(b);
outputStream.flush();
socket.shutdownOutput();
InputStream is=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(is));
System.out.println(bufferedReader.readLine());
@Override
public void run() {
try {
System.out.println(socket.getInetAddress().getHostName()+"已连接");
InputStream inputStream=socket.getInputStream();
BufferedReader bufferedReader=new BufferedReader(new InputStreamReader(inputStream));
System.out.println(socket.getInetAddress().getHostName()+"给你发来消息:"+bufferedReader.readLine());
socket.shutdownInput();Scanner scanner=new Scanner(System.in);
System.out.print("请回复消息:");
String message=scanner.next(); //这里是阻塞的 所以你服务器收到消息之后只能在这里等着 等你打完字之后再回执行之后的代码
OutputStream outputStream=socket.getOutputStream();
byte [] b=message.getBytes();
outputStream.write(b);
outputStream.flush();
}
最后 读取操作也是阻塞的 只有当客户端发来消息之后再回执行之后的代码然后收不到消息的时候 就无法执行之后的输入操作 也就无法发送信息。反之亦然 所以 最终导致 你只能发一次信息收一次信息才能走下一个回合