gpt4 book ai didi

java - 套接字上的 ClosedChannelException

转载 作者:行者123 更新时间:2023-12-02 06:27:44 25 4
gpt4 key购买 nike

我正在尝试使用 VpnService 为 android 构建 TCP/IP 嗅探器。我修改了 ToyVpn 示例,我正确地从描述符中获取了输出 IP 数据包,目前我只是尝试将其发送到没有 IP 的目标套接字和 TCP header ,并在记录来自目标服务器的响应中显示。实际上,我要做的就是在网络中传递数据包,当我收到响应时,将其写入与 ParcelFileDescriptor 对应的 OutputStream 中。

我正在使用此代码:

while (vpnInterface != null && vpnInterface.getFileDescriptor() != null
&& vpnInterface.getFileDescriptor().valid()) {

packet.clear();

// Read the outgoing packet from the input stream.
final byte[] data = packet.array();

int length = in.read(data);

//use this to get the unsigned byte
int[] d = new int[data.length];

if (length > 0) {
packet.limit(length);
StringBuilder sb = new StringBuilder("");
for (int i = 0; i < data.length; i++) {
d[i] = data[i] & 0xFF;
sb.append(d[i] + " ");
}
Log.i("packet", sb.toString());
Socket socket = SocketChannel.open().socket();
if ((null != socket) && (null != this)) {
this.protect(socket);
}

//connect to dest ip and port
socket.connect(new InetSocketAddress(d[16] + "." + d[17] + "."
+ d[18] + "." + d[19], (d[22] * 256) + d[23]));

DataOutputStream dOut = new DataOutputStream(
socket.getOutputStream());
DataInputStream dIn = new DataInputStream(
socket.getInputStream());

dOut.write(data, 40, data.length - 40);
dOut.flush();
dOut.close();

length = dIn.read(data);

if (length > 0) {
sb = new StringBuilder("");
for (int i = 0; i < data.length; i++) {
d[i] = data[i] & 0xFF;
sb.append(d[i] + " ");
}
Log.i("response", sb.toString());
dIn.close();
}
}

Thread.sleep(10);
}

问题是当我尝试从套接字读取InputStream 时出现ClosedChannelException。您知道为什么会发生这种情况吗?我的想法是我不知道如何管理来自目标套接字的输入数据包。

抱歉,如果我犯了任何错误,但我是 JAVA 初学者。

最佳答案

您将关闭从Socket 获得的InputStream。 JavaDoc 说:

Closing the returned InputStream will close the associated socket.

通常,您永远不应该关闭不属于您的流!

对于使用 socket.getOutputStream() 获得的 OutputStream 也是如此。如果关闭它,套接字也会关闭!

关于java - 套接字上的 ClosedChannelException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20363112/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com