有些知识更新的很快:如SSH 有些不然:如底层的通信 你想学那些呢? 服务器:ChatServer.java package socket; /** * Socket connect demo. * lazybone * 20090801 */ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; import FiveChess.TCPServer; public class ChatServer implements ActionListener { public Frame f; public Button send; public TextArea show; public TextField write; ReceiveThreadForServer rtServer; // 界面初始化 void UIInit() { send = new Button("Send"); send.addActionListener(this); send.setEnabled(false); show = new TextArea("", 20, 80, TextArea.SCROLLBARS_VERTICAL_ONLY); show.setEditable(false); write = new TextField("", 72); f = new Frame("CharRoom Server."); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(1); } }); f.setLayout(new FlowLayout()); f.setSize(600, 400); f.add(show); f.add(write); f.add(send); f.setLocationRelativeTo(null); f.setVisible(true); } // 构造方法 public ChatServer() { UIInit(); rtServer = new ReceiveThreadForServer(this); } // 按键处理 @SuppressWarnings("static-access") public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Send")) { sendMessage(); } } // 发送信息 void sendMessage() { String sendStr = this.write.getText(); if (sendStr.equals("")) return; System.out.println("send message"); showReceive("You said:" + sendStr); try { rtServer.os.write(sendStr.getBytes()); } catch (IOException e) { } this.write.setText(""); } // 显示信息 public void showReceive(String str) { this.show.append(str + "/n/n"); } public static void main(String args[]) { new ChatServer(); } } /** * 接收线程类 */ class ReceiveThreadForServer extends Thread { ChatServer chatServer;// 主程序句柄,用来控制界面的 byte[] b = new byte[1024]; String receive; static final int port = 10000; ServerSocket ss; Socket s; InputStream is; OutputStream os; BufferedReader br; String readStr, writeStr; // 打开连接 void getConnect() { try { ss = new ServerSocket(port); chatServer.showReceive("Waiting for Socket..."); Socket s = ss.accept();// 等待Socket连接 chatServer.showReceive("Connecting.You can send message."); chatServer.send.setEnabled(true); os = s.getOutputStream(); is = s.getInputStream(); } catch (Exception e) { } } public ReceiveThreadForServer(ChatServer chatServer) { this.chatServer = chatServer; getConnect(); start(); } public void run() { try { while (true) { int n; // 接收数据 n = is.read(b); receive = new String(b, 0, n); // 主界面显示数据 chatServer.showReceive("Receive:" + receive); } } catch (IOException e) { } finally { try { closeConnect(); } catch (IOException e) { } } } void closeConnect() throws IOException { if (br != null) br.close(); if (is != null) is.close(); if (os != null) os.close(); if (s != null) s.close(); if (ss != null) ss.close(); chatServer.showReceive("Connect is closed."); } } 客户端:ChatClient.java package socket; /** * Socket connect demo. * lazybone * 20090801 */ import java.awt.Button; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.TextArea; import java.awt.TextField; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; import java.util.Random; import FiveChess.TCPServer; public class ChatClient implements ActionListener { public Frame f; public Button send; public TextArea show; public TextField write; ReceiveThreadForClient rtClient; // 界面初始化 void UIInit() { send = new Button("Send"); send.addActionListener(this); send.setEnabled(false); show = new TextArea("", 20, 80, TextArea.SCROLLBARS_VERTICAL_ONLY); show.setEditable(false); write = new TextField("", 72); f = new Frame("CharRoom Client. 10.10.0.56"); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(1); } }); f.setLayout(new FlowLayout()); f.setSize(600, 400); f.add(show); f.add(write); f.add(send); f.setLocationRelativeTo(null); f.setVisible(true); } // 构造方法 public ChatClient() { UIInit(); rtClient = new ReceiveThreadForClient(this); } // 按键处理 @SuppressWarnings("static-access") public void actionPerformed(ActionEvent e) { if (e.getActionCommand().equals("Send")) { sendMessage(); } } // 发送信息 void sendMessage() { String sendStr = this.write.getText(); if (sendStr.equals("")) return; showReceive("You said:" + sendStr); try { rtClient.os.write(sendStr.getBytes()); } catch (IOException e) { } this.write.setText(""); } // 显示信息 public void showReceive(String str) { this.show.append(str + "/n/n"); } public static void main(String args[]) { new ChatClient(); } } /** * 接收线程类 */ class ReceiveThreadForClient extends Thread { ChatClient chatClient;// 主程序句柄,用来控制界面的 byte[] b = new byte[1024]; String receive; static final int port = 10000; Socket s; public InputStream is; public OutputStream os; BufferedReader br; String readStr, writeStr; // 打开连接 void getConnect() { try { s = new Socket("10.10.0.56", 10000); is = s.getInputStream(); os = s.getOutputStream(); chatClient.showReceive("Socket 10.10.0.56:10000 is connected."); chatClient.send.setEnabled(true); } catch (Exception e) { chatClient.showReceive("Connect ERROR."); } } public ReceiveThreadForClient(ChatClient chatClient) { this.chatClient = chatClient; getConnect(); start(); } public void run() { try { while (true) { int n; n = is.read(b); // 接收数据 System.out.println("client:n=" + n); receive = new String(b, 0, n); chatClient.showReceive("Receive:" + receive); // 主界面显示数据 } } catch (IOException e) { } finally { try { closeConnect(); } catch (IOException e) { } } } void closeConnect() throws IOException { if (br != null) br.close(); if (is != null) is.close(); if (os != null) os.close(); if (s != null) s.close(); chatClient.showReceive("Connect is closed."); } }