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);
}
}
运行结果: