TCP的簡單建立連接

服務端服務類


public class TcpService extends Service {
    @Override
    public void onCreate() {
        super.onCreate();

        //   socket原意是插銷
//         ServerSocket 是監聽端口
        // sort 端口號
        new Thread(new Runnable() {
            @Override
            public void run() {
                ServerSocket ss;
                try {
                    ss = new ServerSocket(50000);
                    Socket socket;
                    while ((socket = ss.accept()) != null) {
                        new Thread(new TCPLogic(socket)).start();
                    }
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }).start();

    }

    @Override
    public void onDestroy() {
        super.onDestroy();
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {

        return super.onStartCommand(intent, flags, startId);

    }

    @Override
    public boolean onUnbind(Intent intent) {
        return super.onUnbind(intent);
    }

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {

        return null;
    }

}

服務內的邏輯類

**
 * Created by xalo on 16/8/24.
 */
public class TCPLogic implements Runnable {
    Socket socket;

    public TCPLogic(Socket socket) {
        this.socket = socket;
    }

    @Override
    public void run() {
        Log.d("----遠程主機已連接,地址是:----", socket.getInetAddress().toString());
        try {
            InputStream  is = socket.getInputStream();

            BufferedReader reader = new BufferedReader(new InputStreamReader(is));
            String str;
            while ((str = reader.readLine()) != null) {
                Log.d("---收到遠程消息:---", str);
            }
            Log.d("---遠程主機已斷開---","遠程主機已斷開");
        } catch (IOException e1) {
            e1.printStackTrace();

        }
    }
}

在服務端主線程

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        init();
    }
    private void init(){
        Intent intent=new Intent(MainActivity.this, TcpService.class);
        startService(intent);
    }

客戶端

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;

import java.io.IOException;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

public class MainActivity extends AppCompatActivity {
    Socket socket;
    PrintWriter pw;
    Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = (Button) findViewById(R.id.btn);
        new Thread(new Runnable() {
            @Override
            public void run() {
                connect();
                button.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        sendMessage("hello");
                    }
                });

            }
        }).start();
    }

    private void connect() {
        try {
            InetAddress address = InetAddress.getByName("localhost");
            socket = new Socket(address, 50000);

            OutputStream os = socket.getOutputStream();
            //Buffer是 緩衝區
            pw = new PrintWriter(new OutputStreamWriter(os));
            // bw.write("hello");
            //沖刷管道 緩存區,釋放緩存,在在關閉之前將通道中的殘餘數據 全部送出去
            //bw.flush();
//            socket.close();


        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    private void sendMessage(String msg) {
        pw.println(msg);
        pw.flush();
    }

    private void closeSocket() {
        try {
            pw.flush();
            socket.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}



發佈了26 篇原創文章 · 獲贊 13 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章