⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 paintclient.java

📁 一个简易的java画图软件
💻 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 + -