package untitled1.src;import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.*;
import java.net.*;public class MyServer extends JFrame{private ServerSocket server; // 服务器套接字private Socket socket; // 客户端套接字private BufferedReader reader;private PrintWriter writer;// 根据套接字字节流创建的字符输出流// = new PrintWriter("D:\\word.txt")private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 发送信息的文本框void start() {// 启动服务器try {server = new ServerSocket(8998); // 服务器启用8998端口area.append("服务器套接字已经创建成功\n");while (true) {area.append("等待客户端的连接\n");socket = server.accept(); // 服务器监听客户端连接// 根据套接字字节流创建字符输入流reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));writer = new PrintWriter(socket.getOutputStream(), true);while (true) {// 循环接受信息String message = reader.readLine();// 读取一行文本if ("exit".equals(message)) {// 如果客户端发来的内容为“exit”System.out.println("客户端退出");break;// 停止接受信息}area.append("客户端:" + message + "\n");}reader.close(); // 关闭流socket.close(); // 关闭套接字}} catch (IOException e) {e.printStackTrace();}}public MyServer() throws FileNotFoundException {setTitle("向客户端送数据");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滚动面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 将文本框放在窗体的下部text.addActionListener(new ActionListener() {// 文本框触发回车事件public void actionPerformed(ActionEvent e) {if (text.getText() != null){writer.println(text.getText().trim()); // 将文本框中的信息写入流}area.append(text.getText() + '\n'); // 将文本框中的信息显示在文本域中text.setText(""); // 将文本框清空}});}public static void main(String[] args) throws FileNotFoundException {MyServer tcp = new MyServer();tcp.setSize(500, 300); // 窗体大小tcp.setVisible(true); // 显示窗体tcp.start(); // 启动服务器}
}
package untitled1.src;import java.awt.*;
import java.awt.event.*;
import java.io.*;
import java.net.Socket;
import javax.swing.*;public class MyClient extends JFrame {private BufferedReader reader;private PrintWriter writer;// 根据套接字字节流创建的字符输出流Socket socket; // 客户端套接字private JTextArea area = new JTextArea();// 展示信息的文本域private JTextField text = new JTextField(); // 发送信息的文本框public MyClient() {setTitle("向服务器送数据");setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);Container c = getContentPane(); // 主容器JScrollPane scrollPane = new JScrollPane(area);// 滚动面板getContentPane().add(scrollPane, BorderLayout.CENTER);c.add(text, "South"); // 将文本框放在窗体的下部text.addActionListener(new ActionListener() {// 文本框触发回车事件public void actionPerformed(ActionEvent e) {writer.println(text.getText().trim()); // 将文本框中的信息写入流area.append(text.getText() + '\n'); // 将文本框中的信息显示在文本域中text.setText(""); // 将文本框清空}});}private void connect() { // 连接服务器方法area.append("尝试连接\n"); // 文本域中提示信息try {socket = new Socket("127.0.0.1", 8998); // 连接本地计算机的8998端口writer = new PrintWriter(socket.getOutputStream(), true);reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));area.append("完成连接\n");while (true) {// 循环接受信息String message = reader.readLine();// 读取一行文本if ("exit".equals(message)) {// 如果服务端发来的内容为“exit”System.out.println("服务端退出");break;// 停止接受信息}area.append("服务器:" + message + "\n");}reader.close(); // 关闭流socket.close(); // 关闭套接字} catch (IOException e) {e.printStackTrace();}}public static void main(String[] args) {MyClient clien = new MyClient();clien.setSize(500, 300); // 窗体大小clien.setVisible(true); // 显示窗体clien.connect(); // 连接服务器}
}