gpt4 book ai didi

java - 在 socket.receive(packet) 上中断一个线程;抛出错误

转载 作者:行者123 更新时间:2023-11-29 07:13:59 25 4
gpt4 key购买 nike

我正在开发一个 Android 3.1 平板电脑应用程序,它使用这个线程运行一个服务:

public class UDPServerThread extends Thread
{
[ ... ]

public void run()
{
while (!end)
{
try
{
byte[] buf = new byte[MESSAGE_SIZE];

// Wait an incoming message.
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
// TODO: Notify Service with packet received
Message msg = new Message();
msg.obj = packet;
mServiceHandler.sendMessage(msg);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}

public void stopServer()
{
Log.v("UDPServerThread", "stopServer");
if (socket != null)
socket.close();
end = true;
}
}

当我从服务中调用 stopServer() 方法时,出现以下错误:

java.net.SocketException: Interrupted system call

socket.receive(packet); 上停止线程的正确方法是什么?

最佳答案

此异常的唯一真正问题是您无法轻易地将它与实际的 I/O 错误区分开来。我建议切换到使用 SocketChannel 而不是 Socket —— 然后你可以中断你的服务器线程,它会抛出一个 ClosedByInterruptException,你可以专门捕获和处理它。

关于java - 在 socket.receive(packet) 上中断一个线程;抛出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11325346/

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