实例介绍
【实例简介】
【实例截图】
【核心代码】
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();
}
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论