服务端
-
package 一对一用户;
-
import java.awt.BorderLayout;
-
import java.io.BufferedReader;
-
import java.io.IOException;
-
import java.io.InputStreamReader;
-
import java.io.PrintWriter;
-
import java.net.ServerSocket;
-
import java.net.Socket;
-
import java.util.Vector;
-
import javax.swing.JFrame;
-
import javax.swing.JScrollPane;
-
import javax.swing.JTextArea;
-
public class fuwuchuangkou extends JFrame {
-
private JTextArea ta_info;
-
private ServerSocket server; // 声明ServerSocket对象
-
private Socket socket; // 声明Socket对象socket
-
private Vector<Socket> vector = new Vector<Socket>();// 用于存储连接到服务器的客户端套接字对象
-
public void createSocket() {
-
try {
-
server = new ServerSocket(1978);
-
while (true) {
-
ta_info.append("等待新客户连接......\n");
-
socket = server.accept();// 创建套接字对象
-
vector.add(socket);// 将套接字对象添加到向量对象中
-
ta_info.append("客户端连接成功。" + socket + "\n");
-
new ServerThread(socket).start();// 创建并启动线程对象
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
class ServerThread extends Thread {
-
Socket socket;
-
public ServerThread(Socket socket) {
-
this.socket = socket;
-
}
-
public void run() {
-
try {
-
BufferedReader in = new BufferedReader(new InputStreamReader(
-
socket.getInputStream()));// 创建输入流对象
-
while (true) {
-
String info = in.readLine();// 读取信息
-
for (Socket s : vector) {// 遍历所有客户端套接字对象
-
if (s != socket) {// 如果不是发送信息的套接字对象
-
PrintWriter out = new PrintWriter(s
-
.getOutputStream(), true);// 创建输出流对象
-
out.println(info);// 发送信息
-
out.flush();// 刷新输出缓冲区
-
}
-
}
-
}
-
} catch (IOException e) {
-
ta_info.append(socket + "已经退出。\n");
-
vector.remove(socket);// 移除退出的客户端套接字
-
}
-
}
-
}
-
public static void main(String args[]) {
-
fuwuchuangkou frame = new fuwuchuangkou();
-
frame.setVisible(true);
-
frame.createSocket();
-
}
-
/**
-
* Create the frame
-
*/
-
public fuwuchuangkou() {
-
super();
-
setTitle("一对一");
-
setBounds(100, 100, 385, 266);
-
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
final JScrollPane scrollPane = new JScrollPane();
-
getContentPane().add(scrollPane, BorderLayout.CENTER);
-
ta_info = new JTextArea();
-
scrollPane.setViewportView(ta_info);
-
}
-
}
客户端
-
package 一对一用户;
-
import java.awt.BorderLayout;
-
import java.awt.Dimension;
-
import java.awt.EventQueue;
-
import java.awt.event.ActionEvent;
-
import java.awt.event.ActionListener;
-
import java.io.BufferedReader;
-
import java.io.IOException;
-
import java.io.InputStreamReader;
-
import java.io.PrintWriter;
-
import java.net.Socket;
-
import java.net.UnknownHostException;
-
import javax.swing.JButton;
-
import javax.swing.JFrame;
-
import javax.swing.JLabel;
-
import javax.swing.JPanel;
-
import javax.swing.JScrollPane;
-
import javax.swing.JTextArea;
-
import javax.swing.JTextField;
-
public class kehuchuangkou extends JFrame {
-
private JTextArea ta_info;
-
private JTextField tf_send;
-
PrintWriter out;// 声明输出流对象
-
/**
-
* Launch the application
-
*
-
* @param args
-
*/
-
public static void main(String args[]) {
-
EventQueue.invokeLater(new Runnable() {
-
public void run() {
-
try {
-
kehuchuangkou frame = new kehuchuangkou();
-
frame.setVisible(true);
-
frame.createClientSocket();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
});
-
}
-
public void createClientSocket() {
-
try {
-
Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口
-
out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象
-
new ClientThread(socket).start();// 创建并启动线程对象
-
} catch (UnknownHostException e) {
-
e.printStackTrace();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
class ClientThread extends Thread {
-
Socket socket;
-
public ClientThread(Socket socket) {
-
this.socket = socket;
-
}
-
public void run() {
-
try {
-
BufferedReader in = new BufferedReader(new InputStreamReader(
-
socket.getInputStream()));// 创建输入流对象
-
while (true) {
-
String info = in.readLine();// 读取信息
-
ta_info.append(info + "\n");// 在文本域中显示信息
-
if (info.equals("88")) {
-
break;// 结束线程
-
}
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
private void send() {
-
String info = tf_send.getText();// 获得输入的信息
-
if (info.equals("")) {
-
return;// 如果没输入信息则返回,即不发送
-
}
-
if (info.equals("88")) {
-
System.exit(0);// 如果没输入信息是88,则退出
-
}
-
out.println(info);// 发送信息
-
out.flush();// 刷新输出缓冲区
-
tf_send.setText(null);// 清空文本框
-
}
-
public kehuchuangkou() { //创建面板
-
super();
-
setTitle("一对一");
-
setBounds(100, 100, 385, 266);
-
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
final JPanel panel = new JPanel();
-
getContentPane().add(panel, BorderLayout.SOUTH);
-
final JLabel label = new JLabel();
-
label.setText("输入聊天内容:");
-
panel.add(label);
-
tf_send = new JTextField();
-
tf_send.addActionListener(new ActionListener() {
-
public void actionPerformed(final ActionEvent e) {
-
send();
-
}
-
});
-
tf_send.setPreferredSize(new Dimension(180, 25));
-
panel.add(tf_send);
-
final JButton button = new JButton();
-
button.addActionListener(new ActionListener() {
-
public void actionPerformed(final ActionEvent e) {
-
send();
-
}
-
});
-
button.setText("发 送");
-
panel.add(button);
-
final JScrollPane scrollPane = new JScrollPane();
-
getContentPane().add(scrollPane, BorderLayout.CENTER);
-
ta_info = new JTextArea();
-
scrollPane.setViewportView(ta_info);
-
}
-
}
-
package 一对一用户;
-
import java.awt.BorderLayout;
-
import java.awt.Dimension;
-
import java.awt.EventQueue;
-
import java.awt.event.ActionEvent;
-
import java.awt.event.ActionListener;
-
import java.io.BufferedReader;
-
import java.io.IOException;
-
import java.io.InputStreamReader;
-
import java.io.PrintWriter;
-
import java.net.Socket;
-
import java.net.UnknownHostException;
-
import javax.swing.JButton;
-
import javax.swing.JFrame;
-
import javax.swing.JLabel;
-
import javax.swing.JPanel;
-
import javax.swing.JScrollPane;
-
import javax.swing.JTextArea;
-
import javax.swing.JTextField;
-
public class kehu1 extends JFrame {
-
private JTextArea ta_info;
-
private JTextField tf_send;
-
PrintWriter out;// 声明输出流对象
-
/**
-
* Launch the application
-
*
-
* @param args
-
*/
-
public static void main(String args[]) {
-
EventQueue.invokeLater(new Runnable() {
-
public void run() {
-
try {
-
kehuchuangkou frame = new kehuchuangkou();
-
frame.setVisible(true);
-
frame.createClientSocket();
-
} catch (Exception e) {
-
e.printStackTrace();
-
}
-
}
-
});
-
}
-
public void createClientSocket() {
-
try {
-
Socket socket = new Socket("127.0.0.1", 1978);// 连接本地1978端口
-
out = new PrintWriter(socket.getOutputStream(), true);// 创建输出流对象
-
new ClientThread(socket).start();// 创建并启动线程对象
-
} catch (UnknownHostException e) {
-
e.printStackTrace();
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
class ClientThread extends Thread {
-
Socket socket;
-
public ClientThread(Socket socket) {
-
this.socket = socket;
-
}
-
public void run() {
-
try {
-
BufferedReader in = new BufferedReader(new InputStreamReader(
-
socket.getInputStream()));// 创建输入流对象
-
while (true) {
-
String info = in.readLine();// 读取信息
-
ta_info.append(info + "\n");// 在文本域中显示信息
-
if (info.equals("88")) {
-
break;// 结束线程
-
}
-
}
-
} catch (IOException e) {
-
e.printStackTrace();
-
}
-
}
-
}
-
private void send() {
-
String info = tf_send.getText();// 获得输入的信息
-
if (info.equals("")) {
-
return;// 如果没输入信息则返回,即不发送
-
}
-
if (info.equals("88")) {
-
System.exit(0);// 如果没输入信息是88,则退出
-
}
-
out.println(info);// 发送信息
-
out.flush();// 刷新输出缓冲区
-
tf_send.setText(null);// 清空文本框
-
}
-
public kehu1() { //创建面板
-
super();
-
setTitle("一对一");
-
setBounds(100, 100, 385, 266);
-
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
-
final JPanel panel = new JPanel();
-
getContentPane().add(panel, BorderLayout.SOUTH);
-
final JLabel label = new JLabel();
-
label.setText("输入聊天内容:");
-
panel.add(label);
-
tf_send = new JTextField();
-
tf_send.addActionListener(new ActionListener() {
-
public void actionPerformed(final ActionEvent e) {
-
send();
-
}
-
});
-
tf_send.setPreferredSize(new Dimension(180, 25));
-
panel.add(tf_send);
-
final JButton button = new JButton();
-
button.addActionListener(new ActionListener() {
-
public void actionPerformed(final ActionEvent e) {
-
send();
-
}
-
});
-
button.setText("发 送");
-
panel.add(button);
-
final JScrollPane scrollPane = new JScrollPane();
-
getContentPane().add(scrollPane, BorderLayout.CENTER);
-
ta_info = new JTextArea();
-
scrollPane.setViewportView(ta_info);
-
}
-
}
运行结果如下: