📄 receivingthread.java
字号:
//ReceivingThread是一个线程,它负责监听特定客户端的消息并且把消息发到一个MessageListener.
package fish.server;
import java.io.*;
import java.net.*;
import java.util.StringTokenizer;
import fish.*;
public class ReceivingThread extends Thread {
private BufferedReader input;
private MessageListener messageListener;
private boolean keepListening = true;
public ReceivingThread(MessageListener listener,Socket socket) {
super("ReceivingThread: " + socket);
//设置消息应该被发到的listener
messageListener = listener;
try {
//设置Timeout
socket.setSoTimeout( 5000 );
input = new BufferedReader(
new InputStreamReader(socket.getInputStream()));
}
catch (IOException ex) {
ex.printStackTrace();
}
}
// 监听新消息并且把他们发送到MessageListener
public void run()
{
String message;
while ( keepListening ) {
try {
message = input.readLine();
System.out.println(message);
}
//如果过了规定时间则处理如下异常
catch ( InterruptedIOException ex ) {
//继续下一次的监听
continue;
}
//如果读失败则处理如下异常
catch ( IOException ex ) {
//退出循环
ex.printStackTrace();
break;
}
if (message != null) {
StringTokenizer tokenizer = new StringTokenizer(
message, FishConstants.MESSAGE_SEPARATOR );
if (tokenizer.countTokens() == 2) {
//把消息发送到MessageListener
messageListener.messageReceived(tokenizer.nextToken(), //客户端ID
tokenizer.nextToken() ); //消息
}
else
if ( message.equalsIgnoreCase(
FishConstants.MESSAGE_SEPARATOR +
FishConstants.DISCONNECT_STRING ) )
stopListening();
}
}
try {
input.close();
}
catch ( IOException ioException ) {
ioException.printStackTrace();
}
}
public void stopListening() {
keepListening = false;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -