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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章