基本信息
源码名称:聊天室swing(含服务器端以及客户端)
源码大小:0.03M
文件格式:.zip
开发语言:Java
更新时间:2019-07-11
   友情提示:(无需注册或充值,赞助后即可获取资源下载链接)

     嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300

本次赞助数额为: 2 元 
   源码介绍

package abc.chap16;

import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.InetAddress;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.UnknownHostException;
import java.nio.ByteOrder;
import java.util.Date;
import java.util.Scanner;
import java.util.concurrent.RejectedExecutionException;

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

public class ChatGuiTest extends JFrame implements ActionListener{

    private static final  String PATCH="E:\\";
    private static final  String FILENAME="output.txt";

	JTextField foreignIp;
	JTextField foreignPort;
	JTextField localIp;
	JTextField localPort;
	JTextArea receiveText;
	JTextArea sendText;
	JTextArea logText;
	JButton send;
	JButton close;
	JButton clear;	
	JButton log;
	JButton linkbButton;
	ServerSocket serverSocket;
	public ChatGuiTest(){
		setSize(700,400);
		JPanel topp=new JPanel();
		String localIPS=null;
		try {
			localIPS=InetAddress.getLocalHost().getHostAddress();
		} catch (UnknownHostException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}

		JLabel l1=new JLabel("远程IP");
		foreignIp=new JTextField(localIPS);

		JLabel l2=new JLabel("远程端口");
		foreignPort=new JTextField("2019");

		JLabel l3=new JLabel("本地IP");

		localIp=new JTextField(localIPS);
		JLabel l4=new JLabel("本地端口");
		localPort=new JTextField("2019");
		linkbButton=new JButton("监听");
		linkbButton.addActionListener(this);
		topp.add(l1);
		topp.add(foreignIp);
		topp.add(l2);
		topp.add(foreignPort);
		topp.add(l3);
		topp.add(localIp);
		topp.add(l4);
		topp.add(localPort);
		topp.add(linkbButton);

		Container contentPanel = this.getContentPane();
		contentPanel.add(topp,BorderLayout.NORTH);
		receiveText=new JTextArea();
		sendText=new JTextArea();
        logText=new JTextArea();
		JScrollPane recjsPane=new JScrollPane();
		recjsPane.setViewportView(receiveText);
		recjsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		recjsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
		JScrollPane sendjsPane=new JScrollPane();
		sendjsPane.setViewportView(sendText);
		sendjsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
		sendjsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
        JScrollPane logJsPane=new JScrollPane();
        logJsPane.setViewportView(logText);
        logJsPane.setHorizontalScrollBarPolicy(JScrollPane.HORIZONTAL_SCROLLBAR_AS_NEEDED);
        logJsPane.setVerticalScrollBarPolicy(JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);


		JPanel centerpJPanel=new JPanel();
		centerpJPanel.setLayout(new GridLayout(2,1));
		centerpJPanel.add(recjsPane);
		centerpJPanel.add(sendjsPane);
		centerpJPanel.add(logJsPane);
		contentPanel.add(centerpJPanel);
		send=new JButton("发送");
		close=new JButton("关闭");
		clear=new JButton("清除");
        log=new JButton("查看记录");
		send.addActionListener(this);
		close.addActionListener(this);
		clear.addActionListener(this);
        log.addActionListener(this);
		JPanel botPanel=new JPanel();
		botPanel.setLayout(new GridLayout(1,4));
		botPanel.add(send);
		botPanel.add(close);
		botPanel.add(clear);		
		botPanel.add(log);
		contentPanel.add(botPanel,BorderLayout.SOUTH);
		this.setVisible(true);
		this.setLocationRelativeTo(null);
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	public static void main(String[] args) {
		new ChatGuiTest();

	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
		JButton button=(JButton) arg0.getSource();
		if(button.getActionCommand().equals("发送"))
		{
			
			try {
				System.out.println(foreignIp.getText() "--" foreignPort.getText());
				Socket socket=new Socket(foreignIp.getText(),Integer.parseInt(foreignPort.getText()));
				//输出流
                //os是字节流
				OutputStream os=socket.getOutputStream();
				OutputStreamWriter osw=new OutputStreamWriter(os);	
				String dateString=(new Date()).toLocaleString();
				osw.write(dateString "<>" sendText.getText());
				osw.close();
				os.close();
				socket.close();
                FileOutputStream o = null;
                byte[] buff = new byte[]{};
                try{
                    File file = new File(PATCH FILENAME);
                    if(!file.exists()){
                        file.createNewFile();
                    }
                    if(sendText.getText() != null && !sendText.getText().equals("")){
                        String str = sendText.getText() "\r\n";
                        buff=str.getBytes();
                        o=new FileOutputStream(file,true);
                        o.write(buff);
                        o.flush();
                        o.close();
                    }

                }catch(Exception e){
                    e.printStackTrace();
                }
            } catch (Exception e) {
			 
				e.printStackTrace();
			}

		}else if(button.getActionCommand().equals("清除"))
		{
			sendText.setText("");

		} else if(button.getActionCommand().equals("关闭"))
		{
			System.exit(0);
		}
        else if(button.getActionCommand().equals("查看记录"))
        {
            StringBuilder result = new StringBuilder();
            try{
                File file = new File(PATCH FILENAME);
                //构造一个BufferedReader类来读取文件
                BufferedReader br = new BufferedReader(new FileReader(file));
                String s = null;
                //使用readLine方法,一次读一行
                while((s = br.readLine())!=null){
                    result.append(System.lineSeparator() s);
                }
                br.close();
            }catch(Exception e){
                e.printStackTrace();
            }
            logText.setText(result.toString());
        }
		else if(button.getActionCommand().equals("监听"))
		{
			if(serverSocket==null||!serverSocket.isBound())
			{
			Thread thread=new Thread(new Runnable() {				
			 
				public void run() {
					while(true)
					accept();
					
				}
			});
			thread.start();
			button.setEnabled(false);
			}else{
				JOptionPane.showMessageDialog(null, "对不起,端口被占用!");
			} 

		
		}
	}	

	public void accept()
	{
		try {
			int port=0;
			port=Integer.parseInt(localPort.getText());
			serverSocket=new ServerSocket(port);
			Socket socket=serverSocket.accept();
			InputStream is = socket.getInputStream();
			InputStreamReader isr=new InputStreamReader(is);
			BufferedReader br=new BufferedReader(isr);		
			char c[]=new char[1024];
			int len=0;
			String s="";
			while((len=br.read(c, 0, 1024))>0)
			{
				s=s String.valueOf(c,0,len);    	   
			}
			String dateString="";//(new Date()).toLocaleString();
			
			receiveText.setText(dateString "<>" s "\r\n" receiveText.getText());
			
			
			br.close();
			isr.close();
			is.close();
			socket.close();
			serverSocket.close();
			
		} catch (IOException e) {
			
			 
			e.printStackTrace();
		}		
	}
}