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

证明:

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

服务器端程序:
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);
     }
 }
  
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值