全双工实现服务器与客户端的通信

来源:互联网 发布:网站美工要学什么 编辑:程序博客网 时间:2024/06/05 07:33
/* * 服务器端 */package TestServer;import javax.swing.*;import java.awt.*;import java.io.*;import java.net.*;import java.nio.Buffer;public class MyServer3 extends JFrame{public static void main(String[] args) {// TODO Auto-generated method stubMyServer3 ms = new MyServer3();}public MyServer3(){new ServerSetForm();}}
package TestServer;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.*;import java.net.*;public class ServerSetForm extends JFrame implements ActionListener{JTextArea jta = null;JTextField jtf = null;JButton jb = null;JScrollPane jsp = null;JPanel jp = null;//把信息发给客户端对象PrintWriter pw = null;public ServerSetForm(){jta = new JTextArea();jtf = new JTextField(20);jb = new JButton("发送");jb.addActionListener(this);jsp = new JScrollPane(jta);jp = new JPanel();this.add(jsp, BorderLayout.CENTER);jp.add(jtf);jp.add(jb);this.add(jp,BorderLayout.SOUTH);this.setSize(400,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("服务器端");this.setLocationRelativeTo(null);this.setResizable(false);this.setVisible(true);try {ServerSocket ss = new ServerSocket(9998);Socket s = ss.accept();InputStreamReader isr = new InputStreamReader(s.getInputStream());BufferedReader br = new BufferedReader(isr);pw = new PrintWriter(s.getOutputStream(),true);//读取从客户端得到的信息while(true){String str = br.readLine();jta.append("服务器接收:"+str+"\r\n");}} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent e) {// TODO Auto-generated method stub//用户按下发送的按钮if(e.getSource() == jb){//把服务器在jtf写的内容发送到客户端String info = jtf.getText();jta.append("服务器发出:" + info + "\r\n");pw.println(info);//清空jtf的内容jtf.setText("");}}}

/* * 客户端 */package TestClient;import javax.swing.*;import java.awt.*;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.awt.event.KeyEvent;import java.awt.event.KeyListener;import java.io.*;import java.net.*;/* * KeyListener按键不能发生反应 * ?????? */public class MyClient3 extends JFrame implements ActionListener,KeyListener{JTextArea jta = null;JTextField jtf = null;JButton jb = null;JScrollPane jsp = null;JPanel jp = null;PrintWriter pw = null;public static void main(String[] args) {// TODO Auto-generated method stubMyClient3 ms = new MyClient3();}public MyClient3(){jta = new JTextArea();jtf = new JTextField(20);jb = new JButton("发送");jb.addActionListener(this);addKeyListener(this);jsp = new JScrollPane(jta);jp = new JPanel();this.add(jsp, BorderLayout.CENTER);jp.add(jtf);jp.add(jb);this.add(jp,BorderLayout.SOUTH);this.setSize(400,300);this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);this.setTitle("客户端");this.setLocationRelativeTo(null);this.setResizable(false);this.setVisible(true);try {Socket s = new Socket("127.0.0.1",9998);InputStreamReader isr = new InputStreamReader(s.getInputStream());BufferedReader br = new BufferedReader(isr);pw = new PrintWriter(s.getOutputStream(),true);while(true){String info = br.readLine();/* * append向JTextArea中添加信息的时候不会产生覆盖的现象 * setText往JTextArea中添加信息的时候会产生覆盖现象 */jta.setText("客户端接收到:" + info + "\r\n");}} catch (UnknownHostException e) {// TODO Auto-generated catch blocke.printStackTrace();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}}@Overridepublic void actionPerformed(ActionEvent arg0) {// TODO Auto-generated method stubif(arg0.getSource() == jb){//getText表示从JTextField中得到要输入的信息String str = jtf.getText();jta.append("客户端发出:" + str + "\r\n");pw.println(str);jtf.setText("");}}@Overridepublic void keyPressed(KeyEvent e) {// TODO Auto-generated method stubSystem.out.println("********");if(e.getKeyCode() == KeyEvent.VK_ENTER){System.out.println("sadfsdfasdfafsdasfadsdfasdfa");//getText表示从JTextField中得到要输入的信息String str = jtf.getText();jta.append("客户端发出:" + str + "\r\n");pw.println(str);jtf.setText("");}}@Overridepublic void keyReleased(KeyEvent e) {// TODO Auto-generated method stub}@Overridepublic void keyTyped(KeyEvent e) {// TODO Auto-generated method stub}}


客户端与服务器端不要在同一个工程中

实现界面


0 0