您的位置:首页 > 移动开发 > Android开发

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

2016-04-17 16:34 549 查看
界面布局已经实现,现在开始搭建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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 服务器 聊天