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一下,这样数据才会真正的从缓冲区里面写入。

  • 相关阅读:
    NSData
    Local declaration of 'content' hides instance variable
    【转】关于ObjectiveC 2.0 的垃圾收集
    【转】ObjectiveC 2.0之前需要了解的:关于ObjC内存管理的规则
    【转】谈ObjC对象的两段构造模式
    [转]苹果开发工具XCode教学:用Instruments解决内存泄露
    【转】NSMutableArray的正确使用
    【转】UIAlertView使用小结
    pad点餐系统重构原则
    'initWithFrame:reuseIdentifier:' is deprecated
  • 原文地址:https://www.cnblogs.com/01picker/p/4829507.html
Copyright © 2011-2022 走看看