服务端服务类
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(); } } }