您的位置:首页 > 理论基础 > 计算机网络

Android Socket网络通信

2010-08-13 15:33 399 查看
1.服务器程序:

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;

/**

* com Server

*

* @author Aina.huang E-mail: 674023920@qq.com

* @version 创建时间:2010 Jul 14, 2010 10:45:35 AM 类说明

*/

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;// 线程池

/**

* @param args

*/

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 {

/** Called when the activity is first created. */

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">

</Button>

</LinearLayout>

源于:http://aina-hk55hk.javaeye.com/blog/712725
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: