java简单多人聊天

服务器端代码:
package chat;

import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.HashSet;
import java.util.Iterator;

public class sever {

	/**
	 * 服务器端
	 * @param args
	 */
	public HashSet<Socket> clients = new HashSet<Socket>();
	
	public sever() {
		try {
			ServerSocket ss = new ServerSocket(8888);
			Socket socketaccept = new Socket();
			while(true){
				socketaccept = ss.accept();
				clients.add(socketaccept);
				new ServerThread(socketaccept,clients).start();
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

	}
class ServerThread extends Thread{
    private Socket socketaccept;
    private HashSet<Socket> clients;
	public ServerThread(Socket socketaccept, HashSet<Socket> clients) {
		this.socketaccept = socketaccept;
		this.clients = clients;
	}

	@Override
	public void run() {
	 try {
		DataInputStream din = new DataInputStream(socketaccept.getInputStream());
		while(true){
			SendMess(din.readUTF());
		}
	} catch (IOException e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	} 
	}
	
}
public void SendMess(String readUTF) {
	Iterator iter = clients.iterator();
	while(iter.hasNext()){
		Socket temp = (Socket)iter.next();
		try {
			DataOutputStream dout = new DataOutputStream(temp.getOutputStream());
			dout.writeUTF(readUTF);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}
public static void main(String[] args){
	System.out.println("服务器已启动--");
	new sever();
}
}
</pre><pre name="code" class="java">客户端代码:
</pre><pre name="code" class="java">
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.Frame;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.text.SimpleDateFormat;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.SwingUtilities;




public class client extends JFrame{

	/**
	 * 客户端
	 * @param args
	 */
	private JTextArea jta;
	private JTextField jtf;
	private JButton jb;
	private JLabel name;
	private JPanel jp;
	private static ThreadReceive trReceive = null;	//接收线程
	private static Socket sc;

	public client(){
		this.setSize(300, 350);
		this.setTitle("聊天室");
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//退出
		jta = new JTextArea(15,20);
		jtf = new JTextField(15);
		jb = new JButton("发送");
		name = new JLabel("");
		jp = new JPanel();
		jp.setLayout(new FlowLayout());
		jp.add(jb);
		jp.add(jtf);
		jp.add(name);
		jb.addActionListener(new SendMess());//发送数据..
		this.setLayout(new BorderLayout());
		this.add(jta,BorderLayout.CENTER);
		this.add(jp,BorderLayout.SOUTH);
		getMess();
		this.setVisible(true);
	}
	 class ThreadReceive extends Thread{
	
		public void run() {
		DataInputStream din;
		try {
			while(true){
			din = new DataInputStream(sc.getInputStream());
			jta.append(din.readUTF()+"\n");
			
		//	System.out.println("接收数据:  "+din.readUTF());
			}
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		}
	}
	public  void getMess() {
		try {
		    sc = new Socket("127.0.0.1",8888);
				trReceive = new ThreadReceive();
				trReceive.start();//循环接收数据
			
		//	}
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		name.setText(JOptionPane.showInputDialog(this,"请输入你的姓名"));
	}//getMess
	
	class SendMess implements ActionListener{

		@Override
		public void actionPerformed(ActionEvent e) {
           SimpleDateFormat format = new SimpleDateFormat("yyyy:MM:dd");
           String time = format.format(new Date());
           try {
      //     while(true){//发送按钮
			DataOutputStream dout = new DataOutputStream(sc.getOutputStream());
		    dout.writeUTF(time+' '+name.getText()+":"+jtf.getText());
        //	}
		} catch (IOException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		}
		
	}
public static void main(String[] args){
	System.out.println("客户端..");
	SwingUtilities.invokeLater(new Runnable() {
		public void run() {
			client thisClass = new client();
		}
	});
}
}
采用socket编程,这个程序也是为了验证tcp通信可以多对1.  服务器端没有做界面。

                
  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值