【socket聊天室】编写Java的GUI的一个简单的聊天室

完整代码私聊我要。。。

 服务端:

客户端:

package liaotian;

import java.awt.BorderLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.BorderFactory;
import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JList;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.border.TitledBorder;

public class Client extends JFrame implements ActionListener{
	

	public Client() throws UnknownHostException, IOException{     					//构造方法		
    	super();					//调用父类的构造方法设置标题
    	init();							//调用init   	
    	setVisible(true);
    }
	Socket socket1;
	DefaultListModel<String> dl = new DefaultListModel<String>();//用来修改JList
	JList jl = new JList(dl);
	JLabel label=new JLabel("连接到127.0.0.1:9999端口!");
	JButton button1=new JButton("发送");	
	JButton button2=new JButton("清空");			
	JTextArea text1=new JTextArea(10,4);
	JTextArea text2=new JTextArea(2,1);
	
    JPanel jp1=new JPanel(); 
    JScrollPane jp2=new JScrollPane();
	JPanel jp3=new JPanel();
	JPanel jp4=new JPanel();
	JScrollPane jp5=new JScrollPane(text2);
	JScrollPane jp6=new JScrollPane(text1);
	 
	
	private void init() throws UnknownHostException, IOException {
		String username=JOptionPane.showInputDialog("请输入您的用户名");
		setTitle(username+"聊天室");
		setSize(500,400);
		setLocationRelativeTo(null);
        setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
              
        jp6.setBorder(BorderFactory.createTitledBorder("聊天记录"));
        text1.setEditable(false);
        jp1.setLayout(new BorderLayout());
        label.setHorizontalAlignment(JLabel.RIGHT);
        jp1.add(label,BorderLayout.NORTH);
        jp1.add(jp6,BorderLayout.CENTER);
        
		jl.setFixedCellWidth(100);
		jl.setFixedCellHeight(35);
        jl.setBorder(new TitledBorder("好友列表"));
        
        jp2.setViewportView(jl);
        jp5.setBorder(BorderFactory.createTitledBorder("请输入文字"));
        jp3.setLayout(new BorderLayout());
        jp4.add(button1);
        jp4.add(button2);
        jp3.add(jp5,BorderLayout.NORTH);
        jp3.add(jp4,BorderLayout.SOUTH);
        //整个布局
        add(jp1,BorderLayout.CENTER);
        add(jp2,BorderLayout.WEST);
        add(jp3,BorderLayout.SOUTH);
        
        button1.addActionListener(this);
        button2.addActionListener(this);
        
        Socket socket =new Socket("127.0.0.1",8080);
		socket1=socket;
		PrintStream ps=new PrintStream(socket.getOutputStream());
		ps.println("login"+username+"login");
		ps.flush();
		new thread(socket).start();
        
     this.addWindowListener(new WindowAdapter() {
			
			public void windowClosing(WindowEvent e) {
				ps.println("exit");
				ps.flush();
			
			}
		});
	}
	
	public void actionPerformed(ActionEvent e) {
		String button = e.getActionCommand();
		if(button=="清空") {
			text2.setText("");
		}
		if(button=="发送") {
			String mess=text2.getText();
			try {
				sendmess(socket1,mess);
				text2.setText("");
			} catch (IOException e1) {			
				e1.printStackTrace();
			}	
			
		}
	}
	
	public static void main(String[] args) throws UnknownHostException, IOException{
		new Client();
		
	}
	
class thread  extends Thread{
	
		Socket socket;		
		 public thread(Socket socket) {
			this.socket=socket;
		}
		 
	  public void run() {		
			
	  while(true) {				
			  try {  
				
				BufferedReader br = null;
			     br = new BufferedReader(new InputStreamReader(socket.getInputStream()));		
			    String msg;				   
				msg = br.readLine();//读取服务器是否发送了消息给该客户端				
				
				if(msg.startsWith("login")&&msg.endsWith("login")) {									
				String[] strs = msg.replace("login", "").split("#");				
				dl.clear();
				for(String str:strs) {
					dl.addElement(str);
				   }
			    }
				
				else {
					text1.append(msg+"\n");
				}
				
			} catch (IOException e) {
				e.printStackTrace();
			}
	     }  		   			
	  }
	}	

	private void sendmess(Socket socket,String mess) throws IOException {
		PrintStream ps=new PrintStream(socket.getOutputStream());
		ps.println(mess);
		ps.flush();
	}
	
}

 大致就是这样。。。。

6844777a3f334076b4757adb2af7e236.png

 

 

好的,我可以为您提供一些基本思路和代码示例。 首先,您需要使用Java编写一个GUI界面,可以使用Swing或JavaFX。在这个GUI界面中,您需要设置一个文本框用于显示聊天记录,一个文本框用于输入聊天内容,以及一个按钮用于发送聊天内容。 接下来,您需要使用JavaSocket编程实现客户端和服务器之间的通信。客户端需要连接到服务器,并向服务器发送聊天内容。服务器需要接收来自客户端的聊天内容,并将其广播给所有连接到服务器的客户端。 下面是一个简单的代码示例,帮助您开始编写聊天室应用程序: 客户端代码: ```java import java.io.*; import java.net.*; import javax.swing.*; public class ChatClient extends JFrame implements ActionListener { private PrintWriter writer; private BufferedReader reader; private JTextArea chatArea; private JTextField inputField; public ChatClient() { // 创建GUI界面 chatArea = new JTextArea(); inputField = new JTextField(); JButton sendButton = new JButton("发送"); sendButton.addActionListener(this); JPanel panel = new JPanel(); panel.setLayout(new BorderLayout()); panel.add(new JScrollPane(chatArea), BorderLayout.CENTER); panel.add(inputField, BorderLayout.SOUTH); panel.add(sendButton, BorderLayout.EAST); this.add(panel); this.setTitle("聊天室"); this.setSize(400, 300); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.setVisible(true); // 连接服务器 try { Socket socket = new Socket("localhost", 8888); writer = new PrintWriter(socket.getOutputStream()); reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); // 接收服务器发送的消息 Thread t = new Thread(new Runnable() { @Override public void run() { try { String line; while ((line = reader.readLine()) != null) { chatArea.append(line + "\n"); } } catch (IOException e) { e.printStackTrace(); } } }); t.start(); } catch (IOException e) { e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { // 发送聊天内容到服务器 String text = inputField.getText(); writer.println(text); writer.flush(); inputField.setText(""); } public static void main(String[] args) { new ChatClient(); } } ``` 服务器代码: ```java import java.io.*; import java.net.*; import java.util.*; public class ChatServer { private List<PrintWriter> writers = new ArrayList<>(); public ChatServer() { try { ServerSocket server = new ServerSocket(8888); System.out.println("服务器已启动,等待客户端连接..."); while (true) { Socket socket = server.accept(); System.out.println("客户端已连接:" + socket.getInetAddress()); // 将新连接的客户端添加到列表中 PrintWriter writer = new PrintWriter(socket.getOutputStream()); writers.add(writer); // 开启新线程处理客户端发来的消息 Thread t = new Thread(new ClientHandler(socket)); t.start(); } } catch (IOException e) { e.printStackTrace(); } } public void broadcast(String message) { // 广播消息给所有客户端 for (PrintWriter writer : writers) { writer.println(message); writer.flush(); } } private class ClientHandler implements Runnable { private Socket socket; private BufferedReader reader; public ClientHandler(Socket socket) { this.socket = socket; try { reader = new BufferedReader(new InputStreamReader(socket.getInputStream())); } catch (IOException e) { e.printStackTrace(); } } @Override public void run() { String line; try { while ((line = reader.readLine()) != null) { System.out.println("收到消息:" + line); broadcast(line); } } catch (IOException e) { e.printStackTrace(); } finally { // 客户端断开连接,从列表中移除 writers.remove(new PrintWriter(socket.getOutputStream())); } } } public static void main(String[] args) { new ChatServer(); } } ``` 希望这个简单的示例能够帮助您开始编写自己的Java GUI界面聊天室应用程序。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值