📄 paintclient.java
字号:
package net;
import java.net.*;
import java.io.*;
import app.Application;
import draw.View;
/**
* 客户端,控制着客户端接收器和客户端发送器
*
* @author Thihy
*
*/
public class PaintClient extends Thread {
protected View view;
protected String netName;
ClientSend clientSend;
ClientReceive clientReceive;
Socket socket;
protected String errorInfo = null;
public PaintClient(View view) {
this.view = view;
socket = new Socket();
}
/**
* 设置具有唯一性的网络名称
* @param newNetName 网络名称
*/
public void setNetName(String newNetName) {
this.netName = newNetName;
}
/**
* 获取网络名称
* @return 网络名称
*/
public String getNetName() {
return netName;
}
/**
* 向服务器发送消息
* @param netMes 待发送的消息
*/
public void sendMessage(NetMessage netMes) {
if (netMes.messageHeader.equals(NetMessage.MES_SHUTDOWN)) { // 当前客户端自己关闭了
try {
clientReceive.isShutDown = true;
socket.close();
} catch (IOException e) {
// 关闭socket而已
}
} else {
clientSend.sendMessage(netMes);
}
}
/**
* 从服务器接受到的消息
* @param obj 接受到的消息
*/
public void receiveMessage(Object obj) {
if (obj instanceof NetMessage) {
NetMessage netMes = (NetMessage) obj;
view.receiveMessage(netMes);
} else {
if (Application.DEBUG > 3) {
System.out.println("客户端接收到一个非消息对象");
}
}
}
/**
* 尝试与地址addr进行连接,如果失败,会返回假
* 错误信息用GetErrorInfo()获得
*/
public boolean connectTo(InetSocketAddress addr) {
try {
socket.connect(addr, 2000);
return true;
} catch (SocketTimeoutException e) {
System.out.println("与服务端的连接超过限时。 ");
errorInfo = "与服务端的连接超过限时。 ";
if (Application.DEBUG > 0) {
StackTraceElement[] ste$ = e.getStackTrace();
StackTraceElement ste = ste$[ste$.length - 1];
System.out.println("\t代码位于 " + ste.getFileName() + ":"
+ ste.getLineNumber());
}
return false;
} catch (ConnectException e) {
System.out.println("连接遭到拒绝,服务端可能没有正常工作。");
errorInfo = "连接遭到拒绝,服务端可能没有正常工作。 ";
if (Application.DEBUG > 0) {
StackTraceElement[] ste$ = e.getStackTrace();
StackTraceElement ste = ste$[ste$.length - 1];
System.out.println("\t代码位于 " + ste.getFileName() + ":"
+ ste.getLineNumber());
}
return false;
} catch (IOException e) {
System.out.println("无法与服务端进行通信。 ");
errorInfo = "无法与服务端进行通信。 ";
if (Application.DEBUG > 0) {
System.out.println("具体异常为:" + e);
StackTraceElement[] ste$ = e.getStackTrace();
StackTraceElement ste = ste$[ste$.length - 1];
System.out.println("\t代码位于 " + ste.getFileName() + ":"
+ ste.getLineNumber());
}
return false;
}
}
/**
* 获取失败的错误信息
* @return 失败的错误信息
*/
public String getErrorInfo() {
return errorInfo;
}
@Override
public void run() {
if (socket == null || !socket.isConnected())
return;
System.out.println(socket);
clientReceive = new ClientReceive(this, socket);
clientReceive.start();
clientSend = new ClientSend(this, socket);
clientSend.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -