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(); // 連接服務器}
}