android聊天器(仿QQ)编写第二天__服务器的搭建

界面布局已经实现,现在开始搭建java服务器
Java服务器代码为:

package ChartRoom;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 聊天室的服务器--装载多个客户端的Socket请求,转发每个人说的话
 */
public class Server {

    public static void main(String[] args) {

        try {
            // 建立端口
            //map存放昵称和socket对象
            Map<String,Socket>map=new HashMap<>();
            ServerSocket ss = new ServerSocket(8868);
            System.out.println("服务器已打开,现在开始接受连接!");
            // 准备一个同步安全的结合来承载所有连接到的客户端socket对象
            List<Socket> list = Collections
                    .synchronizedList(new ArrayList<Socket>());
            // 循环接受某个客户端的请求,并加入list


            while (true) {
                Socket soc = ss.accept();
                System.out.println("客户端" +soc.getInetAddress().getHostAddress()+ "已连接,进入聊天室");
                list.add(soc);

                // 在循环中,要不停的e为每个客户端开一个线程,用于接受该客户端的发送的消息,并转发给其他客户端
                ServerThread st = new ServerThread(soc, list,map);
                st.start();
            }
        }  catch (IOException e) {
            System.out.println("聊天室服务器异常");
            e.printStackTrace();
        }

    }
}

上面代码中的注释已经够清楚了,我也就不在重复了。
服务器线程(接收消息和转发消息):其中,消息的转发回转发给所有人包括,发送者,所有有追求的可以自行去完善,我是为了测试,并没有实现不转发给发送者。。。望理解。
代码为(简单啊):

public class ServerThread extends Thread{
    //每个客户端连接的socket
    private Socket soc;
    private List<Socket>list;
    private Map<String,Socket>map;
    private Calendar ca;
    private boolean flag=false;
    public ServerThread(Socket soc, List<Socket> list,Map<String,Socket> map) {
        this.soc = soc;
        this.list = list;
        this.map=map;
    }
    @Override
    public void run() {
    try{
        BufferedReader bf=
                new BufferedReader(new InputStreamReader(soc.getInputStream(), "GBK"));

        while(true){
            //接受当前客户端发送的消息
            String words=bf.readLine();
            if(words!=null){
                System.out.println(words);
                for(Socket s:list){
                    PrintWriter pw=new PrintWriter(new OutputStreamWriter(s.getOutputStream(), "GBK"),true);
                    ca=Calendar.getInstance();
                    String str = (new SimpleDateFormat("HH:mm")).format(ca
                            .getTime());
                    pw.println("fwqsent"+words);
                    //pw.println(words);
                    pw.flush();
                    System.out.println("服务器转发成功"+s.getInetAddress().getHostAddress());
                }

            }   

上面的代码注意分号哈,由于我下面的判断逻辑代码较多,结束的分号我并没有复制,自行去完善。。。
好了,服务器的搭建完成。。。好少的感觉哈。
服务器运行的效果图为
这里写图片描述
ps:服务器搭建没什么难点,要实现其他的功能,则要添加逻辑判断,如私聊或者其他。上期的布局地址是:http://blog.csdn.net/mn827748115/article/details/51173753

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值