借鉴自开发艺术
Socket,套接字,分为流式套接字TCP,用户数据报套接字UDP。
TCP面向连接,稳定,双向,有着经典的3次挥手、4次挥手,有超时重传机制
UDP面向地址,不稳定,拥塞、复杂网络环境可能会丢失,但效率更高,双向
权限
<uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
先在远程Service建立一个TCP服务,再在主界面连接TCP服务,再在服务端进行一定的处理,使得可以接受多个客户端的连接。
这里监听的是8688端口。当有客户端连接的时候,会生成一个新的Socket(如果是真正的服务器,只有一个套接字)
当客户端断开连接时,服务端这边也会关闭对应Socket。这里的实现原理是通过判断服务端输入流的返回值来判断。当客户端断开连接时,服务端的输入流会返回null。
服务端
public class TCPServerService extends Service { private static final String TAG = "xbh"; private boolean mIsServiceDestoryed = false; private String[] mDefinedMessages = new String[]{ "hello", "hi", "good", "perfect", "pretty" }; @Override public void onCreate() { new Thread(new TcpServer()).start(); super.onCreate(); } public TCPServerService() { } @Override public IBinder onBind(Intent intent) { return null; } @Override public void onDestroy() { mIsServiceDestoryed = true; super.onDestroy(); } private class TcpServer implements Runnable { @Override public void run() { ServerSocket serverSocket = null;//视为端口