首页>代码>java swing+socket+mysql实现多个客户端局域网聊天>/项目源文件/ChatRoom/src/com/client/ChatManager.java
package com.client;

import com.util.JDBCUtility;

import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.URLDecoder;
import java.net.UnknownHostException;
import java.util.Properties;

import javax.swing.JOptionPane;

public class ChatManager {

	private ChatManager() {
	}

	private static final ChatManager instance = new ChatManager();

	public static ChatManager getCM() {
		return instance;
	}

	private MainWIndow window;
	public static Socket socket;
	private InputStream input;
	private OutputStream out;
	private BufferedReader reader;
	private PrintWriter writer;
	public static boolean isConnected = false;
	connect t;

	public void setWindow(MainWIndow window) {
		this.window = window;
	}

	class connect extends Thread {
		public void run() {
			try {
				String realPath = JDBCUtility.class.getClassLoader().getResource("")
						.getFile();
				realPath = URLDecoder.decode(realPath, "utf-8");
				Properties p = new Properties();
				InputStream in = new BufferedInputStream(new FileInputStream(
						realPath + "/lib/Connection.properties"));
				p.load(in);
				String ip = p.getProperty("ip");
				int prot = Integer.parseInt(p.getProperty("prot"));
				socket = new Socket(ip, prot);
				showMessage();
			} catch (UnknownHostException e) {
				System.out.println(4);
			} catch (IOException e) {
				JOptionPane.showMessageDialog(null, "无法连接服务器");
			}
		}
	}

	//发送消息
	public void sendMessage(String message) {
		if (message == null || message.trim().length() == 0) {
			return;
		}
		try {
			out = socket.getOutputStream();
			writer = new PrintWriter(new OutputStreamWriter(out), true);
			if (writer != null) {
				writer.println(message);
			} else {
				window.appendText("与服务器断开连接");
			}
		} catch (IOException e) {
			System.out.println(3);
		}

	}

	// 断开与服务端的连接
	@SuppressWarnings("deprecation")
	public synchronized boolean closeConnection() {
		t = new connect();
		try {
			sendMessage("CLOSE");// 发送断开连接命令给服务器
			t.stop();// 停止接受消息线程
			// 释放资源
			if (reader != null) {
				reader.close();
			}
			if(input!=null){
				out.close();
			}
			
			if (writer != null) {
				writer.close();
			}
			if(out!=null){
				out.close();
			}
			
			if (socket != null) {
				socket.close();
			}
			isConnected = false;
			return true;
		} catch (IOException e1) {
			isConnected = true;
			return false;
		}
	}

	// 连接服务端
	public boolean connectServer() {
		try {
			t = new connect();
			t.start();
			isConnected = true;// 已经连接上了
			return true;
		} catch (Exception e) {
			JOptionPane.showMessageDialog(null, "连接服务器失败!");
			isConnected = false;// 未连接上
			return false;
		}
	}

	// 接收消息
	public void showMessage() {
		try {
			input = socket.getInputStream();
			reader = new BufferedReader(new InputStreamReader(input, "utf-8"));
			String line = "";
			while ((line = reader.readLine()) != null) {
				if (line != null) {
					window.appendText(line + "\r\n");
				}
			}
		} catch (IOException e) {
			JOptionPane.showMessageDialog(null, "与服务器断开连接");
		}

	}
}
最近下载更多
fuyouou  LV5 2023年6月29日
fantesy  LV17 2022年12月5日
Kevin_001  LV6 2022年7月3日
微信网友_6003487859068928  LV5 2022年6月15日
微信网友_5989987974549504  LV5 2022年6月6日
978806986  LV16 2022年6月5日
testuser1234567  LV24 2022年5月31日
yuxinnan  LV4 2022年2月5日
谢小饭_  LV8 2021年12月27日
huangzy  LV12 2021年11月10日
最近浏览更多
ma406805131  LV15 6月29日
krispeng  LV13 4月15日
3334004690  LV10 3月20日
Xiaobaiya11  LV2 3月4日
uni-code_0123  LV1 1月31日
fuyouou  LV5 2023年6月29日
CL200228  LV4 2023年5月4日
臧家旺  LV3 2023年3月23日
zb200221 2022年12月5日
暂无贡献等级
微信网友_6191697646571520  LV6 2022年11月23日
顶部 客服 微信二维码 底部
>扫描二维码关注最代码为好友扫描二维码关注最代码为好友