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

客户端的代码:

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();    // 获取客户IP
							String 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();
		}// 创建连接服务器的Socket
		receiveMessage();// 启动接收信息的线程
	}

	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();
    }
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值