当前位置: 安卓之星 -> 安卓源码 -> 利用Socket与服务器端交互的简单Android范例代码

利用Socket与服务器端交互的简单Android范例代码

作者:网络 发表于: 2016-07-10 点击: 343 次

在Android中可以直接利用java中的Socket与ServerSocket构建socket通信。 代码的运行环境: pc端:普通pc,作为服务器,在5648端口进行监听。
代码运行一切正常,客户端发送的文字将在服务器端接收并显示,服务器每接收到客户端的一行文字,就会返回一个从0开始递增的整数,此整数将在客户端显示出来。 pc端代码:

package test;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

public class Test implements Runnable{

    /**
     * @param args
     */

    int max=10;      //最大开启线程数
    int i=0;         //回复数字
    int temp;
    ServerSocket serverSocket;
    Socket socket[];

    public Test(){

        try {
            serverSocket=new ServerSocket(5648);    //在5648端口进行侦听
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            System.out.println("can't initate ServerSocket!");
            return;
        }

        socket=new Socket[max];

        System.out.println("waiting for connect");
        try {
            while((socket[i]=serverSocket.accept())!=null){
                temp=i;
                i++;
                new Thread(this).start();           //每侦听到一个客户端的连接,就会开启一个工作线程

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
    public static void main(String[] args) {
        new Test();

    }

    @Override
    public void run() {
        Socket sk=socket[temp];
        System.out.println("accept:"+sk.getInetAddress().getHostAddress());
        InputStream is=null;
        OutputStream os=null;
        BufferedReader br=null;
        PrintWriter pw=null;
        try {
            is=sk.getInputStream();
            os=sk.getOutputStream();
            br=new BufferedReader(new InputStreamReader(is));
            pw=new PrintWriter(os);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            try {
                sk.close();
            } catch (IOException e1) {
                // TODO Auto-generated catch block
                e1.printStackTrace();
            }
            return;
        }
        String str;
        try {
            int m=0;
            while((str=br.readLine())!=null){
                System.out.println(str);
                pw.println(m);
                pw.flush();
                m++;
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

android设备客户端代码: MainActivity.java;代码:

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener,Runnable{

    private Button button;
    private EditText editText;
    private Socket socket;
    private PrintWriter pw;
    private BufferedReader br;
    private Handler handler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        handler=new Handler();
        button=(Button)findViewById(R.id.button);
        button.setOnClickListener(this);
        editText=(EditText)findViewById(R.id.edittext);
        try {
            socket=new Socket("tobacco5648.xicp.net",5648);        //连接到tobacco5648.xicp.net的5648端口
} catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.e("socket","unknown host");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            Log.e("socket","io execption");
        }
        if(socket==null){
            Log.e("socket","null");
        }
        else
            try {
            pw=new PrintWriter(socket.getOutputStream());
            br=new BufferedReader(new InputStreamReader(socket.getInputStream()));
            if(pw!=null&&br!=null){
                new Thread(this).start();
            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    public void onClick(View view) {
        if(view==button){
            String str;
            str=editText.getText().toString();
            pw.println(str);
            pw.flush();
        }

    }

    public void run() {

        try {
            String str;
            while((str=br.readLine())!=null){
                final String s=str;
                handler.post(new Runnable(){

                    public void run() {
                        Toast.makeText(MainActivity.this, s, Toast.LENGTH_LONG).show();

                    }});

            }
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

相关文章

相关文章

赶快留言冒泡

  • 评论 (0)
  • 引用通告 (0)
目前还没有任何评论.
目前还没有任何Trackbacks和Pingbacks.
吐个泡浮上去.