Swing 之简易聊天程序

package com.ethan.socket;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JApplet;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

public class Client extends JFrame implements Runnable {
	
	private JPanel jpanel = new JPanel();
	
	private JLabel nameLabel = new JLabel("姓名:");
	private JTextField nameField = new JTextField();
	private JTextArea msgArea = new JTextArea();
	private JTextField sendField = new JTextField();
	
	private JScrollPane jScrollPane1 = new JScrollPane();
	
	private BufferedReader reader;
	private PrintWriter writer;
	private Socket socket;
	
	public Client(String title) {
		super(title);
		
//		setResizable(false);
		this.setSize(360,340);
		this.add(jpanel);
		jpanel.setLayout(null);
		msgArea.setEditable(false);
		
		jpanel.add(nameLabel);
		nameLabel.setBounds(10,10,60,20);
		
		jpanel.add(nameField);
		nameField.setBounds(60,10,270,21);
		
		jpanel.add(sendField);
		sendField.setBounds(10,270,320,21);
		
		msgArea.setColumns(20);
		msgArea.setRows(5);
		
		jScrollPane1.setViewportView(msgArea);
		jpanel.add(jScrollPane1);
		
		jScrollPane1.setBounds(10,40,320,220);
		
		sendField.addActionListener(new ActionListener() {
			
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				writer.println(nameField.getText()+": "+sendField.getText());
				sendField.setText("");
			}
		});
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		while(true) {
			try {
				msgArea.append(reader.readLine()+"\n");
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}

	private void getSocket() {
		msgArea.append("尝试与服务器连接");
		
		try {
			socket = new Socket("127.0.0.1",7777);
			msgArea.append("准备完毕!");
			
			reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
			writer = new PrintWriter(socket.getOutputStream(),true);
			
			new Thread(this).start();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Client client = new Client("迷你聊天屋");
		client.setVisible(true);
		client.getSocket();
	}

}

package com.ethan.socket;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
	private SocketManager socketMan = new SocketManager();
	
	void getServer() {
		try {
			ServerSocket serverSocket = new ServerSocket(7777);
			System.out.println("server socket starting.......");
			
			
			while(true) {
				Socket socket = serverSocket.accept();
				new Write_Thread(socket).start();
				
				socketMan.add(socket);
				socketMan.sendClientCount();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	private class Write_Thread extends Thread {
		Socket socket = null;
		private BufferedReader reader;
		private PrintWriter writer;
		
		public Write_Thread(Socket socket) {
			this.socket = socket;
		}
		
		public void run() {
			try {
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				
				//writer = new PrintWriter(socket.getOutputStream(),true);
				
				String msg;
				while((msg=reader.readLine())!=null) {
					System.out.println(msg);
					socketMan.sendToAll(msg);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	public static void main(String args[]) {
		Server server = new Server();
		server.getServer();
	}
}

package com.ethan.socket;
import java.io.IOException;
import java.io.PrintWriter;
import java.net.Socket;
import java.util.ArrayList;


public class SocketManager extends ArrayList {
	synchronized void add(Socket socket) {
		super.add(socket);
	}
	
	synchronized void remove(Socket socket) {
		super.remove(socket);
	}
	
	synchronized void sendToAll(String str) {
		PrintWriter writer = null;
		Socket socket;
		
		for(int i=0;i<size();i++) {
			socket = (Socket) get(i);
			
			try {
				writer = new PrintWriter(socket.getOutputStream(),true);
				if(writer!=null) {
					writer.println(str);
				}
			} catch (IOException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
	}
	
	synchronized void sendClientCount() {
		String count = "当前聊天人数:"+size();
		System.out.println(count);
		sendToAll(count);
	}
}

特把以前学习过的代码拿出来,分享一下
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值