刚开始接触Android的网络通信开发。
目前自己写了一个聊天室的小程序,记录一下。
本程序包括:
1.服务器:由java开发
2.客户端:由Android开发
首先贴上演示效果。先开启服务端程序以后,再打开客户端。
服务器的console起到接受并且转发的目的:
服务端代码:
package com.ustclin.talk;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.ArrayList;
public class Server {
//private static final String IP_ADDRESS = "192.168.0.200";
private static final int PORT = 18888;
private static int num = 0;
public static ArrayList<Socket> socketList = new ArrayList<Socket>();
/**
* @param args
*/
public static void main(String[] args) {
ServerSocket serverSocket = null;
System.out.println("ServerSocket Begin........");
try {
serverSocket = new ServerSocket(PORT);
// 使用循环方式一直等待客户端的连接
while (true) {
num++;
Socket accept = serverSocket.accept();
socketList.add(accept);
System.out.println("arrayList num = "+socketList.size());
// 启动一个新的线程,接管与当前客户端的交互会话
new Thread(new ServerThread(accept , "Client "+num ), "Client " + num).start();
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
serverSocket.close();
System.out.println("----> serverSocket closed.");
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
/**
* @author JCC 服务器处理客户端会话的线程
*/
class ServerThread implements Runnable {
Socket socket = null;
String clientName = null;
public ServerThread(Socket socket , String clientName) {
System.out.println("Create a new ServerThread...");
this.socket = socket;
this.clientName = clientName;
}
@Override
public void run() {
try {
// 接收客户端消息
BufferedReader in = new BufferedReader(new InputStreamReader(
socket.getInputStream()));
while (true) {
String message = null;
if (!socket.isClosed()) {
try {
message = in.readLine();
} catch (Exception e) {
e.printStackTrace();
}
if(null == message){
// the socket is null , means that the client is disconnect
Server.socketList.remove(socket);
break;
}
System.out.println("server read Line from "+ clientName + " success! message = " + message);
for(Socket ss : Server.socketList){
// 发送消息,向客户端
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(ss.getOutputStream())), true);
out.println(this.clientName +": "+ message);
System.out.println("Thread " + clientName +