📄 packetreceivingthread.java
字号:
//PacketReceivingThread负责监听从FishServer发过来的包含消息的DatagramPackets
//,并将符合要求的消息送到指定的MessageListener。
package fish.client;
import java.io.*;
import java.net.*;
import java.util.*;
import fish.*;
public class PacketReceivingThread extends Thread {
private MessageListener messageListener;
private MulticastSocket multicastSocket;
private InetAddress multicastGroup;
private boolean keepListening = true;
public PacketReceivingThread(MessageListener listener)
{
super( "PacketReceivingThread" );
messageListener = listener;
try {
multicastSocket = new MulticastSocket(
FishConstants.MULTICAST_LISTENING_PORT );
multicastGroup = InetAddress.getByName(
FishConstants.MULTICAST_ADDRESS );
multicastSocket.joinGroup( multicastGroup );
multicastSocket.setSoTimeout( 5000 );
}
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
public void run()
{
//监听消息直到停止
while ( keepListening ) {
byte[] buffer =
new byte[ FishConstants.MESSAGE_SIZE ];
DatagramPacket packet = new DatagramPacket( buffer,
FishConstants.MESSAGE_SIZE );
try {
multicastSocket.receive( packet );
}
catch ( InterruptedIOException interruptedIOException ) {
continue;
}
catch ( IOException ioException ) {
ioException.printStackTrace();
break;
}
String message = new String( packet.getData() );
message = message.trim();
StringTokenizer tokenizer = new StringTokenizer(
message, FishConstants.MESSAGE_SEPARATOR );
if ( tokenizer.countTokens() == 2 )
//把消息送给MessageListener
messageListener.messageReceived(
tokenizer.nextToken(), //FishID
tokenizer.nextToken() ); //消息
}
try {
multicastSocket.leaveGroup( multicastGroup );
multicastSocket.close();
}
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
public void stopListening()
{
keepListening = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -