2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > 高级API 快速入门之第六章 用窗体实现Socket对话聊天案例

高级API 快速入门之第六章 用窗体实现Socket对话聊天案例

时间:2019-01-21 12:08:50

相关推荐

高级API 快速入门之第六章 用窗体实现Socket对话聊天案例

服务端:

package com.zking.test;import java.awt.Font;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import .ServerSocket;import .Socket;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;/*** QQ服务器端* @author Administrator**/public class QQServerTest extends JFrame{private ServerSocket ss = null;private Socket sk = null;private JPanel jpa = new JPanel();private JLabel jla = new JLabel("端口号");private JTextField jtfa = new JTextField(8);private JButton jba = new JButton("启动服务器");private JTextArea jta = new JTextArea();private JScrollPane jsp = new JScrollPane(jta);private JPanel jpb = new JPanel();private JTextField jtfb = new JTextField(15);private JButton jbb = new JButton("发送");private JButton jbc = new JButton("接收");public QQServerTest() {this.setTitle("QQ服务器端");this.setSize(400, 500);this.setDefaultCloseOperation(3);this.setLocationRelativeTo(null);jpa.add(jla);jpa.add(jtfa);jpa.add(jba);jtfa.setText(8989+"");jta.setFont(new Font("宋体", Font.BOLD, 18));jta.setEditable(false);jpb.add(jtfb);jpb.add(jbb);jpb.add(jbc);this.getContentPane().add(jpa,"North");this.getContentPane().add(jsp,"Center");this.getContentPane().add(jpb,"South");/*** 启动服务的点击事件jba*/jba.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取端口号String dk = jtfa.getText();Integer port = Integer.valueOf(dk);//appendjta.append("服务器正在启动中....\n");try {//开启服务器 ServerSocketss = new ServerSocket(port);jta.append("服务器启动成功...等待客户端链接....\n");} catch (Exception e2) {e2.printStackTrace();}//利用多线程(小弟)new Thread() {public void run() {while(true) {try {sk = ss.accept();} catch (IOException e) {e.printStackTrace();}jta.append("某客户端上线了....\n");}};}.start();//实现自动接收数据--只要在服务器启动的那一刻,拿取一个线程(小弟弟)自动帮我接收数据并显示。new Thread() {public void run() {while(true) {//让小弟先休息一下try {Thread.sleep(500);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}if (sk != null) {try {InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String content = br.readLine();jta.append("客户端说: " + content + "\n");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}};}.start();}});/*** 服务器端回复消息给客户端 jbb*/jbb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {//获取发送的内容String content = jtfb.getText();//客户端中获取网络输出流 利用Socketif(sk!=null) {//获取网络流try {OutputStream os = sk.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);//写入bw.write(content);bw.newLine();bw.flush();jta.append("我说:"+content);} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}else {JOptionPane.showMessageDialog(null, "客户端没有链接服务器,不能发送消息");}}});/*** 服务器端接受客户端发送的内容 jbb*/jbc.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (sk != null) {try {InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String content = br.readLine();jta.append("客户端说: " + content + "\n");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}});this.setVisible(true);}public static void main(String[] args) {new QQServerTest();}}

客户端:

package com.zking.test;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.BufferedWriter;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStream;import java.io.OutputStreamWriter;import .Socket;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;/*** QQ客户端* * @author Administrator**/public class QQClientTest extends JFrame {// 定义一个Socket套接字private Socket sk = null;private JPanel jpa = new JPanel();private JLabel jla = new JLabel("IP地址");private JTextField jtfa = new JTextField(12);private JLabel jlb = new JLabel("端口号");private JTextField jtfb = new JTextField(8);private JButton jba = new JButton("链接服务器");private JTextArea jta = new JTextArea();private JScrollPane jsp = new JScrollPane(jta);private JPanel jpb = new JPanel();private JTextField jtfc = new JTextField(15);private JButton jbb = new JButton("发送");private JButton jbc = new JButton("接收");public QQClientTest() {this.setTitle("QQ客户端");this.setSize(500, 500);this.setDefaultCloseOperation(3);this.setLocationRelativeTo(null);jpa.add(jla);jpa.add(jtfa);jpa.add(jlb);jpa.add(jtfb);jpa.add(jba);jpb.add(jtfc);jpb.add(jbb);jpb.add(jbc);this.getContentPane().add(jpa, "North");this.getContentPane().add(jsp, "Center");this.getContentPane().add(jpb, "South");/*** 客户端的jba点击事件*/jba.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {String ip = jtfa.getText();int port = Integer.valueOf(jtfb.getText());jta.append("客户端即将来连接服务器\n");//try {sk = new Socket(ip, port);jta.append("链接服务器成功了....\n");} catch (Exception e2) {e2.printStackTrace();}//开启一个多线程实现自动接收数据new Thread() {public void run() {while(true) {try {Thread.sleep(500);} catch (InterruptedException e) {e.printStackTrace();}if (sk != null) {try {InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String content = br.readLine();jta.append("服务器说: " + content + "\n");} catch (IOException e1) {e1.printStackTrace();}}}};}.start();}});/*** 客户端的发送按钮jbb*/jbb.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {// 获取发送的内容String content = jtfc.getText();// 客户端中获取网络输出流 利用Socketif (sk != null) {// 获取网络流try {OutputStream os = sk.getOutputStream();OutputStreamWriter osw = new OutputStreamWriter(os);BufferedWriter bw = new BufferedWriter(osw);// 写入bw.write(content);bw.newLine();bw.flush();jta.append("我:" + content+"\n");} catch (IOException e1) {e1.printStackTrace();}} else {JOptionPane.showMessageDialog(null, "客户端没有链接服务器,不能发送消息");}}});/*** 客户端接收服务器端回复的消息*/jbc.addActionListener(new ActionListener() {@Overridepublic void actionPerformed(ActionEvent e) {if (sk != null) {try {InputStream is = sk.getInputStream();InputStreamReader isr = new InputStreamReader(is);BufferedReader br = new BufferedReader(isr);String content = br.readLine();jta.append("服务器说: " + content + "\n");} catch (IOException e1) {// TODO Auto-generated catch blocke1.printStackTrace();}}}});this.setVisible(true);}public static void main(String[] args) {new QQClientTest();}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。