BufferedRead @ BuferedWrite 在Socket中的问题
来源:互联网 发布:乔丹生涯数据场均 编辑:程序博客网 时间:2024/06/06 18:39
研究Socket编程的时候,想提高传输的效率因此次采用BufferedWrite 与BufferedReader ,完成客户端与服务器端的编程服务器端用。
客户端用Eclipse 中使用ServerSocket实现,客户端使用Android ,
核心代码如下:
serverSocket = new ServerSocket(port); //绑定端口号
Socket socket = serverSocket.accept();//监听接收连接
System.out.println("客户端连接成功!!!!!!!");
//获取输入流并将其包装成具有缓冲作用的包装流
BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
//输出流
BufferedWriter out = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
//读取接收的信息
String in_info = in.readLine()+System.getProperty("line.separator");
System.out.println(in_info);
String out_info = "Goodbye from port "+port;
out.write(out_info+"\n");
out.flush();
socket.close();
测试时能连接成功,但是无法接受数据,
上面的java Socket通信用到了BufferedReader的readLine()方法和BufferedWriter的write()方法。
注意readLine()方法,通过查看JDK中关于此方法的注释可知,它是读取一行数据,这行数据的末尾必须有换行符标识符说明到此为止是一行。不然readLine()方法无法顺利读取。
所以在服务器端或客户端进行输出的时候必须输出换行标识(\n),让对方可以顺利读取一行。因此可以这样写writer.write("hello world\n")。为了更好地使用java的跨平台特性,BufferedWriter提供了一个newLine()方法,该方法就是专门输出一个换行符。所以也可以这样写writer.write("hello world");writer.newLine();
另外既然是BufferedWriter,自然用到了缓冲,当你输出的字符长度不超过缓冲区时,可能不会被输出,这时候程序也无法正常运行。所以要用writer.flush();刷新缓冲区。也就是说writer.write("我接收到你的数据:"+input);writer.newLine();writer.flush();必须一起使用,它们总是同时出现,因此你可以自定义一个方法,包含这三个方法。
public void writeLine(String msg){
writer.write(msg);
writer.newLine();
writer.flush();
}
- BufferedRead @ BuferedWrite 在Socket中的问题
- setsockopt 设置 SO_LINGER 在Android socket编程中的一个问题:
- socket中的BufferedReader问题
- socket中的超时问题
- Socket在Android中的应用
- Socket在Android中的应用
- select在socket中的应用
- socket在ios中的应用
- Socket在Android中的用法
- Socket在Java中的使用
- socket中的半包问题
- MFC Socket中的Receive问题
- socket中的SIGPIPE信号问题
- php中的socket通信问题
- BufferedWrite和BufferedRead的用法。
- libevent在异步socket中的使用
- Select在Socket编程中的应用
- 线程池在socket通信中的应用
- Webkit之理解webkit/chrome的目录结构
- Webkit之组成/Chrome组成
- HTML5游戏制作之路_03_egret的资源加载机制
- 缓冲区溢出攻击实验(三)
- 【算法】桶排序
- BufferedRead @ BuferedWrite 在Socket中的问题
- Qt之窗体透明
- Android反编译
- 南昌大学大神养成计划-第一课《html》
- No row with the given identifier exists:
- 21,变量与数组在内存中存储方式
- sqlmap post注入
- Rolling cURL: PHP并发最佳实践
- 圆弧动作类