java – 通过同一个套接字发送和接收
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了java – 通过同一个套接字发送和接收,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2293字,纯文字阅读大概需要4分钟。
内容图文
![java – 通过同一个套接字发送和接收](/upload/InfoBanner/zyjiaocheng/763/2c23bbcdc3404de8bec42f89ce53ce12.jpg)
我是Java套接字的新手,我在使用相同的套接字发送和接收数据时遇到了问题.
服务器位于Android设备上:
ServerSocket listenSocket = null;
OutputStream dataOutStream = null;
Socket socket = null;
InputStream dataInputStream = null;
// Listen
System.out.println("Start listening");
try {
listenSocket = new ServerSocket(4370);
socket = listenSocket.accept();
System.out.println("Connection accepted");
dataInputStream = socket.getInputStream();
dataOutStream = socket.getOutputStream();
while (dataInputStream.read() != -1);
} catch (IOException e) {
e.printStackTrace();
close(listenSocket, socket);
return;
}
// Answer
System.out.println("Answering...");
byte[] answer = {(byte) 0x82, (byte) 0xf8, 0, 0};
try {
dataOutStream.write(answer);
} catch (IOException e) {
e.printStackTrace();
close(listenSocket, socket);
return;
}
close(listenSocket, socket);
System.out.println("Finished");
客户端在带有Java 6的Linux机器上运行:
Socket socket = new Socket("192.168.1.33", 4370);
OutputStream dataOutputStream = socket.getOutputStream();
InputStream dataInputStream = socket.getInputStream();
byte[] bufferOut = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
dataOutputStream.write(bufferOut);
System.out.println("Sent");
while (dataInputStream.read() != -1);
socket.close();
System.out.println("Finished");
这里的问题是服务器卡住了(dataInputStream.read()!= -1);线.看起来客户端永远不会关闭发送.
如果我在客户端部分中执行dataOutputStream.close()(当然,在编写之后),那么它确实有效,但随后客户端就会死掉(dataInputStream.read()!= -1);说插座已关闭.
我希望保持整个套接字打开,以便在同一个套接字上进行更多数据交换,直到发送关闭命令.
我在这里做错了什么,有什么见解吗?提前致谢!
解决方法:
编辑:奥拉夫展示了一种内置的方式来实现问题中的请求 – 响应场景.
关闭从套接字获取的流也会关闭套接字(see also).另一方面,只要流/套接字打开,从套接字获取的InputStream就不可能查看是否所有数据都已发送(可能存在)在途中更多的位!).除非使用Olafs示例,否则双向通信无法以这种方式工作.这允许等待服务器响应.
您可以做的是自己定义一个结束信号(例如字符串“END”),并且任何一方都会监听,直到读取该结束信号,然后写入.但是这会带来你遇到的各种其他问题(如果发送的文本中包含结束信号怎么办?如果伙伴在发送结束之前死了怎么办?超时?…). see also
我会尝试查看Java中支持的SOAP或RESTful服务(但我不知道在Android上有多好).通常,有许多库可以帮助您解决这些问题,并使您免受低级网络的影响.使用现有解决方案几乎总能带来回报.
内容总结
以上是互联网集市为您收集整理的java – 通过同一个套接字发送和接收全部内容,希望文章能够帮你解决java – 通过同一个套接字发送和接收所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。