Android 使用Socket进行通讯(Android)

一。服务器程序java

服务器程序须要在PC上运行,该程序比较的简单,所以不须要创建Android项目,直接定义一个JAVA类,而且运行该类便可。它仅仅创建ServerSocket监听,并使用Socket获取输入输出流。android

SimpleServer

import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;


public class SimpleServer {

    /**
     * @param args
     * @throws IOException 
     */
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub

        //建立一个ServerSocket,用于监听客户端socket的链接请求
        ServerSocket ss=new ServerSocket(30000);
        //采用循环不断接受来自客户端的请求,服务器端也对应产生一个Socket
        while(true){
            Socket s=ss.accept();
            OutputStream os=s.getOutputStream();
            os.write("您好,您收到了服务器的新年祝福!\n".getBytes("utf-8"));
            os.close();
            s.close();
    }

    }}

二。客户端程序服务器

它仅仅使用Socket创建与制定的IP、制定端口的链接,并使用Socket获取输入输出流读取数据。该客户端程序是一个Android应用,所以还须要创建一个Android项目,改程序的界面包含一个文本框,用于显示从服务器读取的字符串的数据。app

SimpleClient

package my.learn.tcp;

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

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;

public class SimpleClient extends Activity {
    private EditText show;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        show = (EditText) findViewById(R.id.show);

        try {

            Socket socket = new Socket("本身计算机的IP地址", 30000);
            //设置10秒以后即认为是超时
            socket.setSoTimeout(10000);
            BufferedReader br = new BufferedReader(new InputStreamReader(
                    socket.getInputStream()));
            String line = br.readLine();

            show.setText("来自服务器的数据:"+line);

            br.close();
            socket.close();

        } catch (UnknownHostException e) {
            // TODO Auto-generated catch block
            Log.e("UnknownHost", "来自服务器的数据");
            e.printStackTrace();
        } catch (IOException e) {
            Log.e("IOException", "来自服务器的数据");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

    }

}

须要注意的是,在Manifest.xml文件当中,须要对互联网的访问进行受权socket

<uses-permission  android:name="android.permission.INTERNET"/>

效果图:
tcp

相关文章
相关标签/搜索