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

📄 myclient.java

📁 这个QQ通信系统项目是我之前发过类似的一个大的整合
💻 JAVA
字号:
package client;

import java.io.EOFException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.ConnectException;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;
import java.util.Random;
import rule.Embody;
import rule.Order;

public class MyClient {
	private Socket socket = null;

	private InetAddress mip = null;

	private int mUPort = 0;

	private ObjectOutputStream oos = null;

	private ObjectInputStream ois = null;

	private boolean b_t = false;

	private Controller controller = null;

	public MyClient() {
	}

	/**
	 * 启动客户端并生成UDP的端口号
	 * 
	 * @param controller
	 */
	public MyClient(Controller controller) {
		this.controller = controller;
		startTCP();
		mUPort = new Random().nextInt(1000) + 8000;
		try {
			mip = InetAddress.getByName("localhost");
		} catch (UnknownHostException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 启动TCP
	 * 
	 */
	public void startTCP() {
		try {
			socket = new Socket(Order.SERVER_IP, Order.SERVER_PORT);
			oos = new ObjectOutputStream(socket.getOutputStream());
			ois = new ObjectInputStream(socket.getInputStream());
			new Thread(new AcceptObj()).start();// 开启一个线程用来接收服务端发来的信息
		} catch (ConnectException e) {
			System.out.println("怎么搞的,服务器还不启动!");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 定义一个方法用来向服务端发送信息
	 * 
	 * @author st0816003
	 */

	public void send(Embody embody) {
		try {
			oos.writeObject(embody);
			oos.flush();
		} catch (SocketException e) {
			System.out.println("服务器死了怎么发...!?");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	/**
	 * 定义一个内部类作线程用来接收server发来的信息
	 * 
	 * @author st0816003
	 * 
	 */

	public class AcceptObj implements Runnable {

		public void run() {
			b_t = true;
			try {
				while (b_t) {// 不停接收数据并交给parseEmbody(obj)去解析
					Object obj = ois.readObject();
					if (obj != null) {
						controller.parseEmbody(obj);
					}
				}
			} catch (EOFException e) {
				System.out.println("服务器死了.......!?");
				b_t = false;
			} catch (SocketException e) {
				System.out.println("服务器死了怎么读!?");
				b_t = false;
			} catch (IOException e) {
				e.printStackTrace();
			} catch (ClassNotFoundException e) {
				e.printStackTrace();
			}
		}
	}

	public ObjectInputStream getOis() {

		try {
			if (ois == null) {
				ois = new ObjectInputStream(socket.getInputStream());
			}
		} catch (IOException e) {
		}
		return ois;
	}

	public void setOis(ObjectInputStream ois) {
		this.ois = ois;
	}

	public ObjectOutputStream getOos() {

		if (oos == null) {
			try {
				oos = new ObjectOutputStream(socket.getOutputStream());
			} catch (IOException e) {

				e.printStackTrace();
			}
		}

		return oos;
	}

	public void setOos(ObjectOutputStream oos) {
		this.oos = oos;
	}

	public Socket getSocket() {
		return socket;
	}

	public void setSocket(Socket socket) {
		this.socket = socket;
	}

	/**
	 * 定义一个关闭所有连接的方法,当关闭窗口时调用
	 * 
	 * @author st0816003
	 */
	public void closeConnect() {

		try {

			b_t = false;

			if (oos != null) {
				oos.close();
			}
			if (ois != null) {
				ois.close();
			}

			if (socket != null) {
				socket.close();
			}

		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	public InetAddress getMip() {
		return mip;
	}

	public void setMip(InetAddress mip) {
		this.mip = mip;
	}

	public int getMUPort() {
		return mUPort;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -