Socket使用IO流问题

南陈 2017-08-30 08:09:14
因业务需要,想要将GBK字节流发送给服务端。
在客户端中:
OutputStream os = socket.getOutputStream();
OutputStreamWriter osw = new OutputStreamWriter(os,"GBK");
PrintWriter pw = new PrintWriter(osw);
log.info("向服务器发送的报文信息:"+str+",GBK长度:"+str.getBytes("GBK").length);
pw.write(str);

在服务端中:
InputStream in = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(in,"GBK");
BufferedReader br = new BufferedReader(isr);
String clientInputStr = br.readLine();
System.out.println("客户端发过来的内容ret:" + clientInputStr);

总是接收不到数据,而且还提示超时:java.net.SocketTimeoutException: Read timed out,不知道是什么原因。

或者请大家提供一种方案,谢谢!
...全文
216 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
sjjk 2017-08-31
  • 打赏
  • 举报
回复
PrintWriter 输出后要调用flush()方法
WonHyo 2017-08-31
  • 打赏
  • 举报
回复
引用 1 楼 u013087513 的回复:
将超时时间设置的尽量大一些,为何非得用socket sockket 只是让理解原理的,在使用的时候谁还用socket,最传统的就是使用HttpClient了。上网查一下不就OK了
兄弟,那现在流行用什么
110成成 2017-08-31
  • 打赏
  • 举报
回复
不知道你具体代码怎么写的,但是你的客户端在发送输出流之后,要加flush和shutdownOutput 因为不加这个的话,是不会发送-1标志位,你的server端读不到-1 就会一直堵塞着。
WonHyo 2017-08-31
  • 打赏
  • 举报
回复
客户端输出完后,关闭输出流,socket.shutdownOutput();
南陈 2017-08-31
  • 打赏
  • 举报
回复
将超时时间设置成100还是不行,至于为什么要用socket是这是一个老项目的扩展功能,并且老项目的服务端是使用socket通信的,因此要求客户端也使用socket,并且规定传输的数据必须使用GBK编码。
墨笙弘一 2017-08-30
  • 打赏
  • 举报
回复
楼上+! 最直接的就是将时间设置长点,最好的是换个方法 不要用socket
LIUXUN1993728 2017-08-30
  • 打赏
  • 举报
回复
将超时时间设置的尽量大一些,为何非得用socket sockket 只是让理解原理的,在使用的时候谁还用socket,最传统的就是使用HttpClient了。上网查一下不就OK了

67,515

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧