客户端与服务端之间的关系代码

来源:互联网 发布:ftp登录命令 指定端口 编辑:程序博客网 时间:2024/06/08 12:17

客户端的代码:

package com;import java.awt.*;import java.awt.event.*;import java.io.*;import java.net.*;import java.util.Scanner;public class ChatClient {private OutputStream out;private InputStream is;private Socket socket;Frame f = new Frame("我的聊天室");TextField tfip = new TextField(15); // 用户输入昵称的文本框TextField tfdata = new TextField(20);//用户输入信息的文本框List lst = new List(6); // 用于显示接收消息的列表框public static void main(String[] args) {ChatClient c = new ChatClient();c.init();}public void init() {f.setSize(300, 300);f.add(lst);Panel p = new Panel();p.setLayout(new BorderLayout());p.add("West", tfip);p.add("East", tfdata);f.add("South", p);f.setVisible(true);f.setResizable(false);// 限制用户设置窗体的大小f.addWindowListener(new WindowAdapter() {public void windowClosing(WindowEvent e) {f.setVisible(false);f.dispose();System.exit(0);}});tfdata.addActionListener(new ActionListener() {// 填写完内容后,按下回车键所触发的事件public void actionPerformed(ActionEvent e) {// 有关网络发送信息的动作try {out = socket.getOutputStream();     // 获取Socket输出流String ip = socket.getLocalAddress().getHostAddress();    // 获取客户IPString name = tfip.getText() + "(" + ip + "):";     // 获取昵称String text = name + tfdata.getText() + "\n";       // 为信息添加结束符out.write(text.getBytes());         // 发送信息到服务器端out.flush();tfdata.setText("");        // 清空文本框内容} catch (IOException e1) {e1.printStackTrace();}}});try {socket = new Socket("192.168.65.1", 8888);} catch (Exception e1) {e1.printStackTrace();}// 创建连接服务器的SocketreceiveMessage();// 启动接收信息的线程}public void receiveMessage() {// 接收信息的方法new Thread() {// 创建线程public void run() {try {is = socket.getInputStream();Scanner scan = new Scanner(is);// 创建输入流扫描器while (socket.isConnected()) {String text = scan.nextLine() + "\n";// 读取一行信息lst.add(text);// 把读取信息显示到文本域控件sleep(100);// 线程休眠}} catch (Exception e) {e.printStackTrace();}}}.start();// 线程启动}}



服务端的代码:

package com;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import java.util.ArrayList;import java.util.Scanner;public class ChatServer {    static ArrayList<Socket> clients = new ArrayList<Socket>();// Socket集合  泛型        public static void main(String[] args) {        try {            ServerSocket server = new ServerSocket(8888);            System.out.println("服务器已经启动...........");            while (true) {                Socket socket = server.accept();// 接收客户端连接                clients.add(socket);// 把客户端保存到集合中                transmitMessage(socket);            }        } catch (IOException e) {            e.printStackTrace();        }    }        private static void transmitMessage(final Socket socket) throws IOException {        new Thread() {            private Scanner scan;                        public void run() {                try {                    InputStream is = socket.getInputStream(); // 获取客户端Socket输入流                    scan = new Scanner(is);// 创建输入流扫描器                    // 发送连接成功信息                    socket.getOutputStream().write("连接成功....\n".getBytes());                } catch (IOException e1) {                    e1.printStackTrace();                }                while (true) {                    String text = scan.nextLine() + "\n";// 接收客户发送的信息                    for (Socket client : clients) {                        try {                            OutputStream out = client.getOutputStream();// 获取每个客户端的输出流                            out.write(text.getBytes());// 向每个客户端转发信息                            out.flush();                        } catch (IOException e) {                        }                    }                }            }        }.start();    }}



原创粉丝点击