日期:2014-05-20  浏览次数:20782 次

简单的socket 客户端与服务器端 同一台电脑上 通信代码执行顺序

客户端
package cs;
import java.net.*;
import java.lang.*;
import java.io.*;
public class client
 {

 public static void main(String[] args) throws Exception
 {
 InetAddress net=InetAddress.getByName(null);
 Socket socket=new Socket(net,8081);
try
  {
 InputStream in=socket.getInputStream();
 BufferedReader bf=new BufferedReader(new InputStreamReader(in));
 PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
  for(int i=1;i<=5;i++)
  {
  out.println("第"+i+"个随机数为"+Math.random());
  String line=bf.readLine();
  System.out.println(line); / / ???怎么会输不出 难道不会执行
  }
  out.println("quit");
  }
  catch(IOException e)
  {
  System.out.println("异常"+e.getMessage());
  e.printStackTrace();
   
  }
  finally
  {
  System.out.println("连接结束");
  socket.close();
   
  }
   
 }

}
服务器端
package cs;
import java.net.*;
import java.util.Random;
import java.io.*;
public class server {

 
 public static void main(String[] args) throws Exception
 {
  ServerSocket serverSocket=null;
  Socket socket=null;

try
  {
  serverSocket=new ServerSocket(8081);
  socket=serverSocket.accept();
 System.out.println("连接被接受"+socket);
 InputStream in=socket.getInputStream();
 BufferedReader bf=new BufferedReader(new InputStreamReader(in));
 PrintWriter out=new PrintWriter(socket.getOutputStream(),true);
  while(true)
  {
   
  String line=bf.readLine();
  if(line.endsWith("quit")) break;
  System.out.println("接受客户端的数据:"+line);
  out.println("我对客户端说");//写入服务端输出流,即客户端输入流,对吗
  } 
   
  }
  catch(IOException e)
  {
  System.out.println("异常"+e.getMessage());
  e.printStackTrace();
   
  }
  finally
  {
  System.out.println("连接结束");
  serverSocket.close();
  socket.close();
   
  }

 
  
 }

}

我想说的 是 服务器端能 取得 客户端输出流中的数据,并输出显示相应的操作 但是
客户端却不能 从 服务器端输出流中取得数据,并输出显示数据



------解决方案--------------------
因为你的服务端和客户端都是先 readLine(),管子两端都想读,那谁来写东西给另一端读呢?