Android Socket通信与聊天室的实现

最近一直在弄socket的通信,在网上也看了很多例子,在这里,想把自己学的给记录下来
首先我们要创建服务器端的程序
创建ServerListener类继承 Thread类 这样我们可以避免堵塞主线程,专门有个线程来等待客户端的连接
public void run() {
int id = 0;
try{
ServerSocket serversocket=new ServerSocket(12345);//监听12345端口
while(true){
Socket socket=serversocket.accept();
chatSocket cs=new chatSocket(socket);
cs.start();//一旦客户端连接上了 重启一个线程来连接客户端客户端
chatManager.getchatManager().add(cs);//将客户端线程加入管理器中
}
}catch(IOException e){
e.printStackTrace();
}
}

创建chatSocket类继承Thread类,每当有新的线程连接上,就创建一个chatSocket的实例,chatSocket类中,有读写功能

public void out(String out){
        try {
            socket.getOutputStream().write((out+"\n").getBytes("UTF-8"));
        } catch (UnsupportedEncodingException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public void run() {

            try {
                BufferedReader br=
                        new BufferedReader
                           (new InputStreamReader
                                (socket.getInputStream(),"UTF-8"));//获取客户端输入流
                String line=null;
                while((line=br.readLine())!=null){
                    chatManager.getchatManager().publish(this, line);//每读进一句话就广播一句,实现群发功能
                }
                br.close();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            }

客户端线程管理类chatManager类,管理所有的线程

private static final chatManager cm=new chatManager();
    public static chatManager getchatManager(){
        return cm;
    }
    Vector<chatSocket> vector=new Vector<chatSocket>();//创建实现自动增长的对象数组vector
    public void add(chatSocket cs){
        vector.add(cs);//将线程加入到管理器中

    }

    public void publish(chatSocket cs,String out){
        for(int i=0;i<vector.size();i++){//遍历vector数组
            chatSocket cschatSocket=vector.get(i);
            if(!cs.equals(cschatSocket)){//判断数组是否为本身
                cschatSocket.out(out);//向每个数组输出字符串

            }
        }
    }

以上就是聊天室服务器端的实现了,我们可以用telnet 去连接服务器,也可以写其他模式的客户端去连接

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值