基本信息
源码名称:聊天室swing(含服务器端以及客户端)
源码大小:0.03M
文件格式:.zip
开发语言:Java
更新时间:2019-07-11
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在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();
}
}
}