为了账号安全,请及时绑定邮箱和手机立即绑定

用socket的tcp方式,客户端服务器循环发送数据怎么实现?

用socket的tcp方式,客户端服务器循环发送数据怎么实现?

慕粉4241372 2017-04-21 10:41:33
设想如下:启动服务端--启动客户端,键入数据,发送--服务端接收数据,打印出来,键入数据,发送--客户端接收数据,打印出来,键入数据,发送--如此无限反复--public class Server {     static BufferedReader br = null;     static BufferedWriter bw = null;     static Scanner scanner = new Scanner(System.in);          public static void main(String[] args) {       try {           ServerSocket serverSocket = new ServerSocket(8877);         System.out.println("这里是服务端,等待客户端连接");         Socket socket = serverSocket.accept();         System.out.println("已和客户端建立连接"); br = new BufferedReader(new InputStreamReader(socket.getInputStream())); bw = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); Receiver(); } catch (IOException e) { e.printStackTrace(); } } public static void send() { String info = scanner.nextLine(); try { bw.write(info); bw.flush(); } catch (IOException e) { e.printStackTrace(); } Receiver(); } public static void Receiver() { String info = null; try { while ((info = br.readLine()) != null) { System.out.println(info); } } catch (IOException e) { e.printStackTrace(); } send(); } }客户端类似,也是一个send()一个receiver()方法,先调用send方法发送然后调用receiver接收,无限循环。但执行起来在键入数据后却无法发送,按回车发送不出去,怪事。后来我尝试另一种写法,每次在方法里面创建输入输出流,然后在finally里面关闭public class Server { static Scanner scanner = new Scanner(System.in); static Socket socket; public static void main(String[] args) { try { ServerSocket serverSocket = new ServerSocket(8877); System.out.println("这里是服务端,等待客户端连接"); socket = serverSocket.accept(); System.out.println("已和客户端建立连接"); Receiver(); } catch (IOException e) { e.printStackTrace(); } } public static void send() { String info =scanner.nextLine(); try { BufferedWriter bw =  new BufferedWriter(new OutputStreamWriter(socket.getOutputStream())); bw.write(info); bw.flush(); } catch (IOException e) { e.printStackTrace(); } finally { try { socket.shutdownOutput(); } catch (IOException e) { e.printStackTrace(); } Receiver(); } } public static void Receiver() { String info = null; try { BufferedReader br = new BufferedReader(new InputStreamReader(socket.getInputStream())); while ((info = br.readLine()) != null) { System.out.println(info); } } catch (IOException e) { e.printStackTrace(); } finally { try { socket.shutdownInput(); } catch (IOException e) { e.printStackTrace(); } send(); } } }这样能循环一次,但后面就提示流=已经关闭,是不是意味着shutdown输入输出流后就不能重新打开了?但不关闭的话又会出现和上面一样的情况。请问大神们这样子到底应该怎么写呢?
查看完整描述

1 回答

  • 1 回答
  • 1 关注
  • 4458 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信