1.服务器程序:
2.客户端程序:
Java代码
- package
com; -
- import
java.io.BufferedReader; - import
java.io.BufferedWriter; - import
java.io.IOException; - import
java.io.InputStreamReader; - import
java.io.OutputStreamWriter; - import
java.io.PrintWriter; - import
java.net.ServerSocket; - import
java.net.Socket; - import
java.util.ArrayList; - import
java.util.List; - import
java.util.concurrent.ExecutorService; - import
java.util.concurrent.Executors; -
-
- public
class Main { -
-
private static final int PORT = 9999;// 端口监听 -
private List<Socket> mList = new ArrayList<Socket>();// 存放客户端socket -
private ServerSocket server = null; -
private ExecutorService mExecutorService = null;// 线程池 -
-
-
public static void main(String[] args) { -
// TODO Auto-generated method stub -
new Main(); -
} -
-
public Main() { -
try { -
server = new ServerSocket(PORT); -
mExecutorService = Executors.newCachedThreadPool();// 创建一个线程池 -
System.out.println("Server Start..."); -
Socket client = null; -
while (true) { -
client = server.accept(); -
mList.add(client); -
mExecutorService.execute(new Service(client));// 开启一个客户端线程. -
} -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
} -
-
public class Service implements Runnable { -
-
private Socket socket; -
private BufferedReader in = null; -
private String msg = ""; -
-
public Service(Socket socket) { -
this.socket = socket; -
try { -
in = new BufferedReader(new InputStreamReader(socket -
.getInputStream())); -
msg = "user:" + this.socket.getInetAddress() + " come total:" -
+ mList.size(); -
this.sendmsg(); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
-
public void run() { -
// TODO Auto-generated method stub -
try { -
while (true) { -
if ((msg = in.readLine()) != null) { -
if (msg.equals("exit")) { -
System.out.println("sssssssssss"); -
mList.remove(socket); -
in.close(); -
msg = "user:" + socket.getInetAddress() -
+ " exit total:" + mList.size(); -
socket.close(); -
this.sendmsg(); -
break; -
} else { -
msg = socket.getInetAddress() + " : " + msg; -
this.sendmsg(); -
} -
} -
-
} -
} catch (Exception ex) { -
System.out.println("server 读取数据异常"); -
ex.printStackTrace(); -
} -
} -
-
-
public void sendmsg() { -
System.out.println(msg); -
int num = mList.size(); -
for (int i = 0; i < num; i++) { -
Socket mSocket = mList.get(i); -
PrintWriter pout = null; -
try { -
pout = new PrintWriter(new BufferedWriter( -
new OutputStreamWriter(mSocket.getOutputStream())), -
true); -
pout.println(msg); -
} catch (IOException e) { -
e.printStackTrace(); -
} -
} -
} -
} - }
2.客户端程序:
Java代码
- package
com.Aina.Android; -
- import
java.io.BufferedReader; - import
java.io.BufferedWriter; - import
java.io.InputStreamReader; - import
java.io.OutputStreamWriter; - import
java.io.PrintWriter; - import
java.net.Socket; -
- import
android.app.Activity; - import
android.app.AlertDialog; - import
android.content.DialogInterface; - import
android.os.Bundle; - import
android.os.Handler; - import
android.os.Message; - import
android.util.Log; - import
android.view.View; - import
android.widget.Button; - import
android.widget.EditText; - import
android.widget.TextView; -
- public
class Test extends Activity implements Runnable { -
-
private TextView tv_msg = null; -
private EditText ed_msg = null; -
private Button btn_send = null; -
private Button btn_login = null; -
private static final String HOST = "192.168.0.132"; -
private static final int PORT = 9999; -
private Socket socket = null; -
private BufferedReader in = null; -
private PrintWriter out = null; -
private String content = ""; -
-
@Override -
public void onCreate(Bundle savedInstanceState) { -
super.onCreate(savedInstanceState); -
setContentView(R.layout.main); -
tv_msg = (TextView) this.findViewById(R.id.TextView); -
ed_msg = (EditText) this.findViewById(R.id.EditText01); -
btn_login = (Button) this.findViewById(R.id.Button01); -
btn_send = (Button) this.findViewById(R.id.Button02); -
try { -
socket = new Socket(HOST, PORT); -
in = new BufferedReader(new InputStreamReader(socket -
.getInputStream())); -
out = new PrintWriter(new BufferedWriter( -
new OutputStreamWriter(socket.getOutputStream())), -
true); -
} catch (Exception ex) { -
ex.printStackTrace(); -
ShowDialog("登陆异常:" + ex.getMessage()); -
} -
btn_send.setOnClickListener(new Button.OnClickListener() { -
-
public void onClick(View v) { -
// TODO Auto-generated method stub -
String msg = ed_msg.getText().toString(); -
if (socket.isConnected()) { -
if (!socket.isOutputShutdown()) { -
out.println(msg); -
} -
} -
} -
-
}); -
new Thread(this).start(); -
} -
-
public void ShowDialog(String msg) { -
new AlertDialog.Builder(this).setTitle("提示").setMessage(msg) -
.setPositiveButton("OK", new DialogInterface.OnClickListener() { -
-
public void onClick(DialogInterface dialog, int which) { -
// TODO Auto-generated method stub -
-
} -
-
}).show(); -
} -
-
public void run() { -
try { -
while (true) { -
if(socket.isConnected()){ -
if(!socket.isInputShutdown()){ -
if ((content = in.readLine()) != null) { -
Log.i("TAG", "++ "+content); -
content += "\n"; -
mHandler.sendMessage(mHandler.obtainMessage()); -
}else{ -
-
} -
} -
} -
-
} -
} catch (Exception ex) { -
ex.printStackTrace(); -
} -
} -
-
public Handler mHandler = new Handler() { -
public void handleMessage(Message msg) { -
super.handleMessage(msg); -
Log.i("TAG", "-- "+msg); -
tv_msg.setText(tv_msg.getText().toString() + content); -
} -
}; - }
Java代码
- <?xml
version="1.0" encoding="utf-8"?> - <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" -
android:orientation="vertical" android:layout_width="fill_parent" -
android:layout_height="fill_parent"> -
<TextView android:id="@+id/TextView" android:singleLine="false" -
android:layout_width="fill_parent" -
android:layout_height="wrap_content" /> -
<EditText android:hint="content" android:id="@+id/EditText01" -
android:layout_width="fill_parent" -
android:layout_height="wrap_content"> -
</EditText> -
<Button android:text="login" android:id="@+id/Button01" -
android:layout_width="fill_parent" -
android:layout_height="wrap_content"> -
</Button> -
<Button android:text="send" android:id="@+id/Button02" -
android:layout_width="fill_parent" -
android:layout_height="wrap_content">