tcp聊天室转发消息

1.服务器连接

package com.wxh.chatroom;

import java.io.*; 
import java.net.Socket;
import java.net.SocketException;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;


public class ServerConnection extends Thread{
	private Socket socket;
	private PrintWriter pw;
	private BufferedReader br;

	public ServerConnection(Socket socket) {
		super();
		this.socket = socket;
		// 直接开启线程
		this.start();
	}

	// 发送信息的方法
	public void send(String msg) {
		// 使用socket将msg写出去
		try {
			if (pw == null) {
				pw = new PrintWriter(socket.getOutputStream());
			}
			// 输出信息
			pw.println(msg);
			pw.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	// 关闭socket
	public void disConnect() {
		if (socket != null) {
			try {
				socket.close();
			} catch (Exception e) {
			}
		}
	}

	// 接收功能(线程)
	public void run() {
		// 不断读取服务器数据
		try {
			if (br == null) {
				br = new BufferedReader(new InputStreamReader(
						socket.getInputStream()));
			}
			String msg = null;
			while ((msg = br.readLine()) != null) {
				System.out.println(msg);
				
				// 转发
				Set<Map.Entry<String, ServerConnection>> entrySet = DB.connMap
						.entrySet();

				Iterator<Map.Entry<String, ServerConnection>> ite = entrySet
						.iterator();
				while (ite.hasNext()) {
					Map.Entry<String, ServerConnection> entry = ite.next();
					ServerConnection conn = entry.getValue();
					conn.send(socket.getInetAddress() + ":" + msg);
				}				
			}
		} catch (SocketException e) {
			System.out.println("下线了");
		} catch (IOException e) {
			e.printStackTrace();
		}
	}
	public String getIp() {
		return this.socket.getInetAddress().getHostAddress();
	}
}

2.保存connection

package com.wxh.chatroom;

import java.util.HashMap;
import java.util.Map;

/**
 * 保存connection
 * @author Administrator
 *
 */
public class DB {
		public static Map<String,ServerConnection> connMap=new HashMap<String,ServerConnection>();
		
		public static void add(ServerConnection conn){
			connMap.put(conn.getIp(), conn);
		}
}

3.聊天室服务器端

package com.wxh.chatroom;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;

public class ChatRoomServer {

	public static void main(String[] args) {
		ServerConnection connection = null;
		try {
			// 创建ServerSocket
			ServerSocket serverSocket = new ServerSocket(9090);
			// 等待客户端连接
			boolean flag = true;
			while (flag) {
				Socket socket = serverSocket.accept();
				System.out.println(socket.getInetAddress() + "上线了");

				connection = new ServerConnection(socket);
				DB.add(connection);
			}

		} catch (IOException e) {
			e.printStackTrace();
		} finally {
			if (connection != null) {
				connection.disConnect();
			}
		}
	}

}






  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值