当接收的类使用的是BufferedReader,发送的类是BufferedWriter的时候,要注意发送的一行要有换行标识符。

请看下面一个例子,服务器接收不到客户端的信息。

服务器:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; /**
* Created by 290248126 on 14-5-10.
*/
public class Server {
public static void main(String[] args) throws Exception {
ServerSocket serverSocket = new ServerSocket(8088);
Socket socket = serverSocket.accept();
System.out.println("一个客户端连接了"); BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
System.out.println("客户端:" + bufferedReader.readLine()); Thread.sleep(100000);
socket.close();
serverSocket.close();
}
}

客户端:

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket; /**
* Created by 290248126 on 14-5-10.
*/
public class Client {
public static void main(String[] args) throws Exception {
Socket socket = new Socket("localhost",8088);
BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
bufferedWriter.write("你好,我是客户端!");
bufferedWriter.flush();
System.out.println("我们已经发送出去");
Thread.sleep(100000);
socket.close();
}
}

在上面的客户端中,write的时候并没有发送换行标识符,因此服务器在接收的时候,readLine是读取一行,没遇到换行就读取不出来。

因此服务器接收不到客户端的信息。

解决方案方法如下:

只需要修改客户端部分:

bufferedWriter.write("你好,我是客户端!\n");

或者:

bufferedWriter.write("你好,我是客户端!");
bufferedWriter.newLine();

使用bufferedWriter的newLine()方法。
记得发送过去的时候要调用flush()刷新。

另外,客户端程序的正常调用socket.close()之后,服务器的readLine会读取到null,由此判断客户端断开连接。如果直接停止客户端程序,服务器会得到异常:Connection reset

Java Socket 使用BufferedWriter和BufferedReader要注意readLine 以及换行标志的发送的更多相关文章

  1. java Socket通信使用BufferedReader和BufferedWriter的注意事项

    注意事项:readLine()要求有换行标识,write()要输出换行标识,要调用flush()刷新缓冲区. 以下是取自java socket通信中的一小段代码. BufferedReader rea ...

  2. Java IO6:字符流进阶及BufferedWriter、BufferedReader

    字符流和字节流的区别 拿一下上一篇文章的例子: public static void main(String[] args) throws Exception { File file = new Fi ...

  3. java BufferedWriter and BufferedReader

    //Listing 5-2. Demonstrating the BufferedWriter and BufferedReader Classes import java.io.BufferedRe ...

  4. Java IO4:字符流进阶及BufferedWriter、BufferedReader

    字符流和字节流的区别 拿一下上一篇文章的例子: 1 public static void main(String[] args) throws Exception 2 { 3 File file = ...

  5. java中的缓冲流BufferedWriter和BufferedReader

    java中的缓冲流有BufferedWriter和BufferedReader 在java api 手册中这样说缓冲流: 从字符输入流中读取文本,缓冲各个字符,从而实现字符.数组和行的高效读取.可以指 ...

  6. JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine

    JAVA之旅(二十五)--文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine 我们继续IO上个篇 ...

  7. Java IO(五)——字符流进阶及BufferedWriter、BufferedReader

    一.字符流和字节流的区别 拿一下上一篇文章的例子: package com.demo.io; import java.io.File; import java.io.FileReader; impor ...

  8. Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader)

    Java基础-IO流对象之字符缓冲流(BufferedWriter与BufferedReader) 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.字符缓冲流 字符缓冲流根据流的 ...

  9. java socket 多线程通讯

    1.目录结构 2.Server.java 代码 package de.bvb.server; import java.net.ServerSocket; import java.net.Socket; ...

随机推荐

  1. unity 开发总结

    1.慎用线程,unity对线程的支持不是特别完善. 在一些网络通信,资源下载,解压文件,不得已要开线程操作的地方,需要进行线程回收. 2.不压缩的ab,比经过压缩的ab大了将近4倍. 在打包ngui的 ...

  2. .NET中变量的类型问题

    1.JAVA和C# Byte的不同. java里一个byte取值范围是-128~127, 而C#里一个byte是0~255. 首位不同. 但是底层I/O存储的数据是一样的, 比如, 十进制的100, ...

  3. Qt for Android 程序禁止屏幕旋转

    有时候我们希望让一个程序的界面始终保持在一个方向,不随手机(平板)方向旋转而变化:在AndroidManifest.xml的每一个需要禁止转向的Activity配置中加入 android:screen ...

  4. MSSQL优化之——查看语句执行情况

    MSSQL优化之——查看语句执行情况 在写SQL语句时,必须知道语句的执行情况才能对此作出优化.了解SQL语句的执行情况是每个写程序的人必不可少缺的能力.下面是对查询语句执行情况的方法介绍. 一.设置 ...

  5. Oracle表空间、段、区和块

    数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...

  6. AIX性能监控topas命令的详细解析

    执行topas命令后如图所示: #topas 区域1:反映CPU使用率和工作状况  Kernel:操作系统的内核占用的CPU时间比率. 操作系统作为基础软件,为应用程序支持和服务的同时,本身的运行也需 ...

  7. selenium for python 所有方法

    先列出selenium所有方法,然后挨个使用!说明 add_cookieapplication_cachebackcapabilitiesclosecommand_executorcreate_web ...

  8. R语言基础(一) 可视化基础

    ##数据获取 x1=round(runif(100,min=80,max=100)) x2=round(rnorm(100,mean=80, sd=7)) x3=round(rnorm(100,mea ...

  9. c位段

    假如程序表示四盏灯的开关状态灯只有开或关两种状态所以用1和0就可以表示为了节省内存就用一个二进制位表示一盏灯这里就定义位域用 a b c d 各表示一盏 这里定义时注意选用无符号类型位域允许用各种格式 ...

  10. Makefile之wildcard

    1.wildcard : 扩展通配符2.notdir : 去除路径3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd t ...