案例四:java网络编程 双工通讯(带界面)

运行结果截图:

/** * 欢迎大家使用这个源码 如有疑问请加:151648295 * */ package com.xiangqiao123.server; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.PrintWriter; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyServer extends JFrame implements ActionListener, KeyListener { JPanel jp = null; JTextArea jta = null; JScrollPane jsp = null; JTextField jtf = null; JButton jb = null; PrintWriter pw = null; public static void main(String[] args) { new MyServer(); } public MyServer() { //为文本域添加一个滚动条 jta = new JTextArea(); jsp = new JScrollPane(jta); jtf = new JTextField(15); jtf.addKeyListener(this); jb = new JButton("发送"); jb.addActionListener(this); jp = new JPanel(); jp.add(jtf); jp.add(jb); this.add(jsp, BorderLayout.CENTER); this.add(jp, BorderLayout.SOUTH); this.setSize(300, 200); this.setTitle("qq简易聊天"); this.setIconImage(new ImageIcon("image/icon.jpg").getImage()); // 设置窗体居中 Dimension size = Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((int) ((size.getWidth() - this.getWidth()) / 2), (int) ((size.getHeight() - this.getHeight()) / 2)); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { ServerSocket ss = new ServerSocket(9999); Socket s = ss.accept(); // 读取从客户端发来的信息 InputStreamReader isr = new InputStreamReader(s.getInputStream()); BufferedReader br = new BufferedReader(isr); pw = new PrintWriter(s.getOutputStream(), true); while (true) { String info = br.readLine(); jta.append(info + "\n"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == jb) { String info = jtf.getText(); pw.println("服务器:" + info); jta.append("服务器:" + info + "\n"); jtf.setText(""); } } @Override public void keyTyped(KeyEvent e) { } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if (e.getKeyCode() == KeyEvent.VK_ENTER) { String info = jtf.getText(); pw.println("服务器:" + info); jta.append("服务器:" + info + "\n"); jtf.setText(""); } } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } }


/** * 欢迎大家使用这个源码 如有疑问请加:151648295 * */ package com.xiangqiao123.client; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.JTextField; public class MyClient extends JFrame implements ActionListener,KeyListener{ JPanel jp=null; JTextArea jta=null; JScrollPane jsp=null; JTextField jtf=null; JButton jb=null; PrintWriter pw=null; public static void main(String[] args) { new MyClient(); } public MyClient(){ jta=new JTextArea(); jsp=new JScrollPane(jta); jtf=new JTextField(15); jtf.addKeyListener(this); jb=new JButton("发送"); jb.addActionListener(this); jp=new JPanel(); jp.add(jtf); jp.add(jb); this.add(jsp,BorderLayout.CENTER); this.add(jp,BorderLayout.SOUTH); this.setSize(300,200); this.setTitle("qq简易聊天"); this.setIconImage(new ImageIcon("image/icon.jpg").getImage()); //设置窗体居中 Dimension size=Toolkit.getDefaultToolkit().getScreenSize(); this.setLocation((int)((size.getWidth()-this.getWidth())/2),(int)((size.getHeight()-this.getHeight())/2)); this.setVisible(true); this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); try { Socket s=new Socket("127.0.0.1",9999); //读取从客户端发来的信息 InputStreamReader isr=new InputStreamReader(s.getInputStream()); BufferedReader br=new BufferedReader(isr); pw=new PrintWriter(s.getOutputStream(),true); while(true){ String info=br.readLine(); jta.append(info+"\n"); } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==jb){ String info=jtf.getText(); pw.println("客户端:"+info); jta.append("客户端:"+info+"\n"); jtf.setText(""); } } @Override public void keyTyped(KeyEvent e) { // TODO Auto-generated method stub } @Override public void keyPressed(KeyEvent e) { // TODO Auto-generated method stub if(e.getKeyCode()==KeyEvent.VK_ENTER){ String info=jtf.getText(); pw.println("客户端:"+info); jta.append("客户端:"+info+"\n"); jtf.setText(""); } } @Override public void keyReleased(KeyEvent e) { // TODO Auto-generated method stub } }


源码下载:

点此下载源码

欢迎大家关注我的博客,有什么问题可以评论,也可以加入我的:151648295 希望大家一起进步。

我的博客更新很快的哦,这次十月一假期我将给大家分享一个j2se的项目,“制作山寨版qq”,欢迎大家一起关注啊。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值