java socket编程
2015-11-03 10:12
337 查看
参考地址:http://my.oschina.net/u/1156660/blog/291079
进行java socket编程时发现,PrintStream(会自动刷写数据)往套接字里面写数据,对方可以接收;而用OutputStreamWriter往套接字里面写数据,对方是用BufferedReader读的却接受不到,一直阻塞。
服务器端代码:
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
//往套接字里面写数据
PrintStream ps = new PrintStream(s.getOutputStream());-------------------------------(1)
ps.println("你好");------------------------------------------------------------------------------------(2)
//读取客户端发过来的数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("客户端:" + br.readLine());
br.close();
ps.close();
ss.close();
}
客户端代码:
public static void main(String[] args) throws IOException{
Socket s = new Socket("127.0.0.1" , 10000);
//读取客户端发过来的数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("服务器端:" + br.readLine());
//往套接字里面写数据
PrintStream ps = new PrintStream(s.getOutputStream());-----------------------------(1)
ps.println("你好");---------------------------------------------------------------------------------(2)
ps.close();
br.close();
s.close();
}
上述代码是没有问题的,能够正常相互接收。
但当我将(1)(2)代码改写成
OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
BufferedWriter bw = new BufferedWriter(osw);
bw.write("你好");
bw.flush();
此时服务器端和客户端就接收不了数据了,一直在br.readLine()阻塞
解决方法:bw.write("你好" + "\n")就可以了
注:TCP数据的操作建议使用DataInputStream和DataoutputStream
进行java socket编程时发现,PrintStream(会自动刷写数据)往套接字里面写数据,对方可以接收;而用OutputStreamWriter往套接字里面写数据,对方是用BufferedReader读的却接受不到,一直阻塞。
服务器端代码:
public static void main(String[] args) throws IOException{
ServerSocket ss = new ServerSocket(10000);
Socket s = ss.accept();
//往套接字里面写数据
PrintStream ps = new PrintStream(s.getOutputStream());-------------------------------(1)
ps.println("你好");------------------------------------------------------------------------------------(2)
//读取客户端发过来的数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("客户端:" + br.readLine());
br.close();
ps.close();
ss.close();
}
客户端代码:
public static void main(String[] args) throws IOException{
Socket s = new Socket("127.0.0.1" , 10000);
//读取客户端发过来的数据
BufferedReader br = new BufferedReader(new InputStreamReader(s.getInputStream()));
System.out.println("服务器端:" + br.readLine());
//往套接字里面写数据
PrintStream ps = new PrintStream(s.getOutputStream());-----------------------------(1)
ps.println("你好");---------------------------------------------------------------------------------(2)
ps.close();
br.close();
s.close();
}
上述代码是没有问题的,能够正常相互接收。
但当我将(1)(2)代码改写成
OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());
BufferedWriter bw = new BufferedWriter(osw);
bw.write("你好");
bw.flush();
此时服务器端和客户端就接收不了数据了,一直在br.readLine()阻塞
解决方法:bw.write("你好" + "\n")就可以了
注:TCP数据的操作建议使用DataInputStream和DataoutputStream
相关文章推荐
- RSA解密java加密串
- Spring Security4使用(一)
- java运行时异常与一般异常有何异同?
- 关于JAVA弱引用
- JAVA中文乱码解决方法
- smb 连接判断文件夹是否存在,登陆密码含有特殊字符的情况
- 简谈JAVA图片处理
- JAVA帮助文档全系列 JDK1.5 JDK1.6 JDK1.7 官方中英完整版下载
- strust2--异常
- java字符串解析与map集合的遍历
- java.io.*与装饰者模式
- spring的jdbc操作
- java.util.ServiceLoader的用法
- 从”JAVA“而终 5:java的运算符
- [leetcode] Subsets
- java程序内存体现
- 【Java】装饰器模式
- struts2 action 页面跳转,有两个跳转类型是亲试过
- Java SE复习笔记64
- 总结1:: springweb项目基本包结构/eclipse编辑器