最新使用socket写了个小程序,并实现客户端(client)与服务端(server)进行数据传递。
服务端(server)
客户端连接成功后回传消息给客户端
public void sendMessage(String msg) {
PrintWriter out = null;
try {
out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(mSocket.getOutputStream())), true);// 创建输出流对象
out.println(msg);// 转发
} catch (IOException e) {
e.printStackTrace();
}
}
客户端(client)
客户端通过BufferedReader.readLine读取信息
if((message = is.readLine()) != null){
message = socket.getInetAddress() + ":" + message;
System.out.println(message);// 先在控制台输出
}
到这里都没有问题,消息可以正常传输。但是当我把服务端out.println(msg);改成out.wirte(msg)的时候客户端竟然不能接受到消息了。后来查了一下PrintWriter.println和PrintWriter.write方法的区别以后才弄明白:
println(string)打印一个串,结束此行。
write(string) 写入一串。
而BufferedReader.readLine()方法是读一个文本行,只有读取到回车或换行符号时,一行文本才读取完成。
了解了上面的知识后,然后再对PrintWriter.write进行修改为
out.write(msg + "\n");
out.flush();
经过以上的修改后,就可以正常的传输信息了。