Android使用Socket編程連接服務端

jopen 10年前發布 | 34K 次閱讀 Android Android開發 移動開發

首先,在一個Java工程中這樣寫

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


public class SimpleServer
{
    public static void main(String[] args) throws IOException
    {
        ServerSocket serverSocket = new ServerSocket(30000);
        while (true)
        {
            Socket socket = serverSocket.accept();
            InetAddress  inetAddress = socket.getInetAddress();
            System.out.println("IP地址的完全限定域名是:"+inetAddress.getCanonicalHostName()+"\n IP地址字符串為:"+
            inetAddress.getHostAddress()+"\n 主機名為:"+inetAddress.getHostName());
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("這是來自服務器的一句話\n".getBytes("utf-8"));

            outputStream.close();
            socket.close();
        }

    }

}

然后,在一個android 工程中這樣寫(布局上只有一個TextView,就不寫了)

package com.example.socketandroid;

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

import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.app.Activity;
import android.view.Menu;
import android.widget.TextView;

public class MainActivity extends Activity {

    TextView show;
    String ip = "10.0.2.2";
    String line;

    Handler handler = new Handler() {
        public void handleMessage(Message msg) {
            if (msg.arg1 == 1) {
                String textFrom = msg.obj.toString();
                show.setText(textFrom);
            }
        };
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        show = (TextView) findViewById(R.id.show);

        new Thread() {
            public void run() {
                try {
                    Socket socket = new Socket(ip, 30000);
                    BufferedReader bufferedReader = new BufferedReader(
                            new InputStreamReader(socket.getInputStream()));

                    line = bufferedReader.readLine();

                    Message message = handler.obtainMessage();
                    message.obj = line;
                    message.arg1 = 1;
                    handler.sendMessage(message);
                } catch (IOException e) {
                    e.printStackTrace();
                }

            };
        }.start();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

當然 不要忘了添加網絡權限

接下來,先運行java工程,再運行android工程,可以看到textView變成了"這是來自服務器的一句話"

 

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!