java socket聊天室

[原]JavaSocket实现广播聊天室
Server:

 

package ChatIV;
import java.net.*;
import java.io.*;
import java.util.*;

//广播聊天室服务端
public class Server {
    public static void main(String args[]){
        try {
            ServerSocket ss = new ServerSocket(8186);//实现Socket
            List sockets = new ArrayList();//创建一个集合,保存文字消息
            while(true){
                Socket s = ss.accept();//监听8186
                sockets.add(s);//向集合中添加Socket的对象S,把听到的内容保存到集合中
                Thread t1 = new ChatThread(s,sockets);//线程
                t1.start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }   
}
class ChatThread extends Thread{
    Socket s;
    List sockets;
    public ChatThread(Socket s,List sockets){
        this.s=s;
        this.sockets=sockets;
    }
    public void run(){
        try {
            BufferedReader in = new BufferedReader(
                    new InputStreamReader(s.getInputStream()));//包装成字符流
            while(true){
                String str = in.readLine();//读BufferedReader
                for(int i=0;i<sockets.size();i++){//利用For循环遍历集合
                    Socket s2 = (Socket)sockets.get(i);//创建Socket对象S2,强转成Socket,并获取下标
                    PrintWriter out = new PrintWriter(s2.getOutputStream());//文本流输出
                    out.println(str);//打印字符
                    out.flush();//刷新该流的缓冲
                }
            }
        } catch (IOException e) {}
        finally{
            try {
                s.close();
            } catch (IOException e) {}
        }
    }
}

 

Client:

 

package ChatIV;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;

//广播聊天室客户端
public class Client {
    JTextArea jta;
    JTextField jtf;
    BufferedReader in;
    PrintWriter out;
    //Swing画一个界面
    private void initGUI(){
        JFrame f=new JFrame("Client");
        f.setSize(400,300);
        f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jta=new JTextArea();
        jta.setEditable(false);
        f.add(new JScrollPane(jta));
        jtf=new JTextField();
        f.add(jtf,"South");
        f.setVisible(true);
        jtf.addActionListener(new ActionListener(){
            public void actionPerformed(ActionEvent arg0) {
                String text=jtf.getText();
                jtf.setText("");
                out.println(text);
                out.flush();
            }
        });
    }
    //连接初始化
    private void initNet(){
        try {
            Socket s = new Socket("127.0.0.1",8186);//创建Socket端口8186,端口号随意,避免常用端口即可
            out = new PrintWriter(s.getOutputStream());//文本流输出,利用Socket对象获得getOutputStream()
            in = new BufferedReader(new InputStreamReader(s.getInputStream()));//包装成字符流
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    //消息接收
    private void receive(){
        try {
            while(true){
                String str = in.readLine();//读BufferedReader
                if(str==null){
                    return ;
                }
                jta.append("说"+str+"/n");//加载到JTextArea中,显示
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private Client(){
        this.initGUI();
        this.initNet();
    }
    public static void main(String args[]){
        Client c = new Client();
        c.receive();
    }
}

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值