📄 clientlisten.java
字号:
//用来实现接受从客户端发来的数据流 监听用户发来的信息 并执行相关的方法
package dssclient;
import java.io.BufferedInputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.net.Socket;
import java.util.StringTokenizer;
public class ClientListen extends Thread{
ListUser tkparent;
String name;
Socket socket;
BufferedInputStream in; //用来实现接受从客户端发来的数据流
PrintStream out;
byte[] data = new byte[512];
static String ENC = "GB2312";
public ClientListen(ListUser p,Socket s){ //接收数据和发送数据的流
//接受参数
tkparent=p;
socket=s;
try{//实例化两个数据流
out=new PrintStream(s.getOutputStream()); //发送数据
in=new BufferedInputStream(s.getInputStream()); //接收数据
}
catch(IOException e){
System.out.println("错误:"+e);
tkparent.disconnect();
}
}
public void run(){
String msg = null;
while(true){
try{
in.read(data);
msg = new String(data,ENC);
}
catch(IOException e){
System.out.println("错误:"+e);
tkparent.disconnect();
}
if (msg == null){ //如果从服务器传来的信息为空则断开此次连接
try{
tkparent.sk.close();
}
catch(IOException e){
}
return;
}
StringTokenizer st=new StringTokenizer(msg,":"); //用StringTokenizer类来实现读取分段字符
String keyword=st.nextToken(); //读取信息头即关键字用来识别是何种信息
if(keyword.equals("EXIST"))
{
int size=Integer.parseInt(st.nextToken());
for(int i=0;i<size;i++){
tkparent.adduser(st.nextToken());
}
}
else if(keyword.equals("MSG")){ //如果关键字是MSG则是服务器传来的聊天信息
// parent.msghandle(st.nextToken("\0"));
}
else if(keyword.equals("NEW")){
tkparent.adduser(st.nextToken());
}
else if(keyword.equals("BULK")){
tkparent.batchandle(st.nextToken("\0"));
}
else if(keyword.equals("QUIT")){
tkparent.removeuser(st.nextToken());
}
else if(keyword.equals("ERROR")){
}
else if(keyword.equals("FILE_TO")){
tkparent.FileTobox(st.nextToken("\0"));
}
else if(keyword.equals("FILE_FROM")){
tkparent.FileFrombox(st.nextToken("\0"));
}
}
}
void send(String msg){
out.print(msg);
out.flush();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -