关闭

用字符流实现的SOCKET连接不能进行双向传递

1103人阅读 评论(0) 收藏 举报

证明:

当我用字符流实现了服务器端和客户端的连接后,从客户端发送字符串给服务器端,服务器端收到信息后再回传一个信息给客户端此时出现了阻塞,如改用其他流均可实现双向传递。

服务器端程序:
import java.net.*;
import java.io.*;
public class MyServer
{
 private static BufferedReader in;
 private static PrintWriter out;
 public static void main(String args[])
 {
  ServerSocket ss=null;
  try {
   ss=new ServerSocket(1235);
     }
     catch (Exception ex) {
     }
     while(true)
     {
      try {
       System.out.println ("服务器正在监听!");
       Socket socket=ss.accept();
       //建立读连接
       
    in=new BufferedReader(new InputStreamReader(socket.getInputStream ()));
    //建立写连接
    out=new PrintWriter(socket.getOutputStream ());
    //读消息
    
    System.out.println (in.readLine());
    //写消息
    
    out.write("客户端你已经被踢出去了!");
    
    out.flush();
    out.close();
   // break;
      }
      catch (Exception ex) {
       System.out.println ("有问题!");
      }
     }
 }
}
客户端程序:
import java.net.*;
import java.io.*;
public class Client
{
 private static BufferedReader in;
 private static PrintWriter out;
 public static void main(String args[])
 {
  try {
  // Socket socket=new Socket("127.0.0.1",1235);
  Socket socket=new Socket();
   InetAddress ia=InetAddress.getLocalHost();
   InetSocketAddress isa=new InetSocketAddress(ia,1235);
  // socket.bind(isa);
   socket.connect(isa);
   
   //建立读连接
   in=new BufferedReader(new InputStreamReader(socket.getInputStream ()));
   //建立写连接
   out=new PrintWriter(socket.getOutputStream ());
   //发送消息
   out.write("服务器登录了! ");
   
   out.flush();
     
  // System.out.println (in.readLine());//如果将这条语句的注释标记去掉将发生阻塞无法正常读取服务器端发来的数据
   in.close();
   out.close();
     }
     catch (Exception ex) {
      System.out.println ("客户端有问题!"+ex);
     }
 }
  
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:565854次
    • 积分:8653
    • 等级:
    • 排名:第2202名
    • 原创:302篇
    • 转载:29篇
    • 译文:0篇
    • 评论:104条