在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Java语言基础 → 聊天室swing(含服务器端以及客户端)

聊天室swing(含服务器端以及客户端)

Java语言基础

下载此实例
  • 开发语言:Java
  • 实例大小:0.03M
  • 下载次数:24
  • 浏览次数:624
  • 发布时间:2019-07-11
  • 实例类别:Java语言基础
  • 发 布 人:simshen
  • 文件格式:.zip
  • 所需积分:2
 相关标签: swing 聊天室 聊天 入门级

实例介绍

【实例简介】

【实例截图】

from clipboard

【核心代码】

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();
		}		
	}
}

实例下载地址

聊天室swing(含服务器端以及客户端)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警