Android应用通过socket与pc通信的示例代码

2018-07-20    来源:open-open

容器云强势上线!快速搭建集群,上万Linux镜像随意使用
在Android中可以直接利用java中的Socket与ServerSocket构建socket通信。
    代码的运行环境:
    pc端:普通pc,作为服务器,已经设置有域名(通过动态域名软件设置),在5648端口进行监听。
    Android手机客户端:android2.3设备。

    代码运行一切正常,客户端发送的文字将在服务器端接收并显示,服务器每接收到客户端的一行文字,就会返回一个从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();
        }
         
    }
 
     
}

标签: 代码 动态域名 服务器 服务器端 通信 域名

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点!
本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。

上一篇:c#使用Microsoft.Win32的Registry 和RegistryKey类操作注册表

下一篇:HTML5 Canvas 图像动画的实现(实例小球弹跳)