📄 doreciever.java
字号:
package jsm;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.util.Date;
public class DoReciever extends Thread {
MessageHandler mh = MessageHandler.getMH();
Socket cur;
Message ms;
String name;
StringBuffer contents = new StringBuffer(50);
BufferedReader reader;
DoReciever() {
}
public void run() {
int count=0;
while (true) {
// 要设置一个timeout
synchronized (mh.receiptSockets) {
if (mh.receiptSockets.isEmpty()) {
try {
++count;
//System.out.println("receiver wait "+count);
mh.receiptSockets.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
// 在取得本地的sockets时必须同步
cur = (Socket) mh.receiptSockets.removeFirst();
}
doReceive();
// try {
// cur.setSoTimeout(30000);}
// catch (SocketException e1) {
// 要在这里处理超时以后的行为
// e1.printStackTrace();
}
}
public final void appendInf(String ip) {
contents.append("come from:"+ip);
contents.append(' ');
contents.append("time:"+new Date());
contents.append(':');
contents.append('\n');
}
// }
public final void doReceive() {
try {
reader = new BufferedReader(
new InputStreamReader(cur.getInputStream()));
int temp=0;
String remoteIP=cur.getInetAddress().getHostAddress();
appendInf(remoteIP);
// read the friend name,名字可能出现形式(编码等)不正确的情况
while ((temp=reader.read())!=-1) {
contents.append((char)temp);
}
contents.append('\n');
// 传递Message对象到合适的地方
// 这里要牵涉到一个消息来到的事件(或者两个sockets连接建立,通信的事件
// 自己写这个事件的监听器
ms = new Message(contents.toString(), name);
// ...to be continued
String inMS = ms.getSms();
Controler.receiveMessage(inMS);
contents.delete(0,contents.length());
} catch (IOException e) {
// socket可能因为超时而抛出InterruptedIOException,这因该合理的
// 处理(因该提示用户,暂时不做,要保留发送的消息)
// e.printStackTrace();
try {
cur.close();
} catch (IOException e1) {
e1.printStackTrace();
}
} finally {
try {
reader.close();
if (cur != null) {
cur.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -