zoukankan      html  css  js  c++  java
  • socket io 记得flush

    1. public class Client {  
    2.    
    3.    public static void main(String args[]) throws Exception {  
    4.       //为了简单起见,所有的异常都直接往外抛  
    5.       String host = "127.0.0.1";  //要连接的服务端IP地址  
    6.       int port = 8899;   //要连接的服务端对应的监听端口  
    7.       //与服务端建立连接  
    8.       Socket client = new Socket(host, port);  
    9.       //建立连接后就可以往服务端写数据了  
    10.       Writer writer = new OutputStreamWriter(client.getOutputStream());  
    11.       writer.write("Hello Server.");  
    12.       writer.flush();//写完后要记得flush  
    13.       writer.close();  
    14.       client.close();  
    15.    }  
    16.      

    对于客户端往Socket的输出流里面写数据传递给服务端要注意一点,如果写操作之后程序不是对应着输出流的关闭,而是进行其他阻塞式的操作(比如从输入流里面读数据),记住要flush一下,只有这样服务端才能收到客户端发送的数据,否则可能会引起两边无限的互相等待。在稍后讲到客户端和服务端同时读和写的时候会说到这个问题。

    BufferedReader的readLine方法是一次读一行的,这个方法是阻塞的,直到它读到了一行数据为止程序才会继续往下执行,那么readLine什么时候才会读到一行呢?直到程序遇到了换行符或者是对应流的结束符readLine方法才会认为读到了一行,才会结束其阻塞,让程序继续往下执行。所以我们在使用BufferedReader的readLine读取数据的时候一定要记得在对应的输出流里面一定要写入换行符(流结束之后会自动标记为结束,readLine可以识别),写入换行符之后一定记得如果输出流不是马上关闭的情况下记得flush一下,这样数据才会真正的从缓冲区里面写入。

  • 相关阅读:
    祭蟑螂文
    端午随笔
    有感于一个用户的留言
    jQuery UI dialog插件出错信息:$(this).dialog is not a function
    @@ERROR, BEGIN TRY/CATCH and XACT_ABORT
    检索 COM 类工厂中 CLSID 为{0002450000000000C000000000000046} 的组件时失败,原因是出现以下错误: 80070005。
    【SSB】使用命令行来检测Broker是否正常通信
    C#保留2位小数总结
    引用了混乱的组件或类库可能会导致WCF代理类无法正确生成
    [转]从属性赋值到MVVM模式详解
  • 原文地址:https://www.cnblogs.com/01picker/p/4829507.html
Copyright © 2011-2022 走看看