本文共 5219 字,大约阅读时间需要 17 分钟。
Client类:
import java.awt.TextArea;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.net.UnknownHostException;import java.util.Scanner;import javax.swing.JTextArea;import javax.swing.JTextField; public class Client { Socket socket; JTextField a2; JTextArea area; public Client(JTextField a2,JTextArea area) { this.a2=a2; this.area=area; try { socket =new Socket("localhost",5252); In ta=new In(socket,area); Out te=new Out(socket,a2); new Thread(ta).start(); new Thread(te).start(); } catch (UnknownHostException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } }}
Server类:
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.net.ServerSocket;import java.net.Socket;import javax.swing.JTextArea;import javax.swing.JTextField; public class Server { ServerSocket server; Socket socket; JTextField a2;//发送信息文本框 JTextArea area;//接受文本框 String text=""; public Server(JTextField a2,JTextArea area) { this.a2=a2; try { server=new ServerSocket(5252); socket = server.accept(); In ta=new In(socket,area); Out te=new Out(socket,a2); new Thread(ta).start(); new Thread(te).start(); } catch (IOException e) { e.printStackTrace(); } } }
接受信息In类:
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.net.Socket;import javax.swing.JTextArea;public class In implements Runnable { private Socket socket; private JTextArea area; public In(Socket socket,JTextArea area) { this.socket=socket; this.area=area; } public void run() { // TODO 自动生成的方法存根 try { while(true) { InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is, "UTF-8"); BufferedReader br = new BufferedReader(isr); area.setText(br.readLine()); } }catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } }}
发送消息Out类:
import java.awt.event.ActionEvent;import java.awt.event.ActionListener;import java.io.IOException;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.io.PrintWriter;import java.net.Socket;import java.util.Scanner;import javax.swing.JTextField;public class Out implements Runnable{ Scanner sc=new Scanner(System.in); private Socket socket; private String text; JTextField a2; public Out(Socket socket,JTextField a2) { this.socket=socket; this.a2=a2; } @Override public void run() { // TODO 自动生成的方法存根 OutputStream out; try { out = socket.getOutputStream(); OutputStreamWriter osw = new OutputStreamWriter(out, "UTF-8"); PrintWriter pw = new PrintWriter(osw, true); a2.addActionListener(new ActionListener() { @Override public void actionPerformed(ActionEvent e) { // TODO 自动生成的方法存根 pw.println(a2.getText()); } }); } catch (IOException e) { // TODO 自动生成的 catch 块 e.printStackTrace(); } } }
服务器窗口ServerWindow
import javax.swing.*;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class ServerWindow { public static void main(String[] args) { JFrame win=new JFrame("Tencent QQ"); win.setBounds(200, 100, 1100, 800);//窗口的大小定义 win.setVisible(true); win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //输入的面板 JPanel panel=new JPanel(); JTextArea area=new JTextArea(30,80); JTextField toip=new JTextField(30); JTextField duan=new JTextField(30); area.setLineWrap(true); panel.add(toip); panel.add(duan); panel.add(area,"South"); win.add(panel); //输出的面板 JPanel panel2=new JPanel(); JTextField a2=new JTextField(60); a2.setBounds(0, 0,60, 50); panel2.add(a2); win.add(panel2,"South"); //按钮“发送” JButton Song=new JButton("发送"); panel2.add(Song); Server b=new Server(a2,area); }}
用户窗口UserWindow:
import javax.swing.*;import javax.swing.event.AncestorEvent;import javax.swing.event.AncestorListener;import java.awt.event.ActionEvent;import java.awt.event.ActionListener;public class UserWindow { public static void main(String[] args) { JFrame win=new JFrame(" QQ"); win.setBounds(200, 100, 1100, 800);//窗口的大小定义 win.setVisible(true); win.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE); //输入的面板 JPanel panel=new JPanel(); JTextArea area=new JTextArea(30,80); JTextField toip=new JTextField(30); JTextField duan=new JTextField(30); area.setLineWrap(true); panel.add(toip); panel.add(duan); panel.add(area,"South"); win.add(panel); //输出的面板 JPanel panel2=new JPanel(); JTextField a2=new JTextField(60); a2.setBounds(0, 0,60, 50); panel2.add(a2); win.add(panel2,"South"); //按钮“发送” JButton Song=new JButton("发送"); panel2.add(Song); Client client=new Client(a2,area); }}
运行结果:
转载地址:http://garwi.baihongyu.com/