最近做一个awt的udp小程序
服务器端要实时检测端口
需要一个循环实现
不知道在线程中如何实现安全中止线程
用thread.stop()界面会有问题
简单代码如下:
public class udp_thread extends Thread
{
private int port;
private int buffer_size;
private JTextArea mem_message; public udp_thread(int port, int buffer_size, JTextArea mem_message)
{
this.port = port;
this.buffer_size = buffer_size;
this.mem_message = mem_message;
} public void run()
{
byte[] buffer = new byte[buffer_size];
try
{
DatagramSocket server = new DatagramSocket(port);
while(true)
{
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
server.receive(packet);
if (packet.getLength() <= 0)
continue;
this.respond(packet);
}
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}
} public void respond(DatagramPacket packet)
{
byte[] buffer = new byte[packet.getLength()];
System.arraycopy(packet.getData(), 0, buffer, 0, packet.getLength());
try
{
String str = new String(buffer, "8859_1");
mem_message.append(packet.getAddress() + " [" + packet.getPort() + "] : " + str + "\r\n");
}
catch (Exception ex)
{
}
}
}
服务器端要实时检测端口
需要一个循环实现
不知道在线程中如何实现安全中止线程
用thread.stop()界面会有问题
简单代码如下:
public class udp_thread extends Thread
{
private int port;
private int buffer_size;
private JTextArea mem_message; public udp_thread(int port, int buffer_size, JTextArea mem_message)
{
this.port = port;
this.buffer_size = buffer_size;
this.mem_message = mem_message;
} public void run()
{
byte[] buffer = new byte[buffer_size];
try
{
DatagramSocket server = new DatagramSocket(port);
while(true)
{
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
server.receive(packet);
if (packet.getLength() <= 0)
continue;
this.respond(packet);
}
}
catch (Exception ex)
{
System.out.println(ex.getMessage());
}
} public void respond(DatagramPacket packet)
{
byte[] buffer = new byte[packet.getLength()];
System.arraycopy(packet.getData(), 0, buffer, 0, packet.getLength());
try
{
String str = new String(buffer, "8859_1");
mem_message.append(packet.getAddress() + " [" + packet.getPort() + "] : " + str + "\r\n");
}
catch (Exception ex)
{
}
}
}
while里面不就可以了,不要一直true。
弃用~~取而代之的是 void interrupt() 中断线程。 LZ可以试试
加入标志变量我试了
可是server.receive(packet);必须接收一次客户端udp的数据
才能够进入下次循环然后退出
while(b){把B的值改为false}
dosomething;
if(need interrupt){
flag = false;
}}
a.setexitflag(true);
a.interrupt();
while(a.isAlive());//等待线程结束
或者packet 在发送的包里存储些字符 如果是1就终止 然后你收到包后取出内容判断