Socket 通信,小试牛刀

网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。

一直想在尝试两台设备之间互相连接,通信,交互的功能。了解到Socket,很有意思。基本可以实现我的设想,甚至可以多台设备互联,不清楚成熟的物联网又是通过什么什么进行互联?

我的初步目标是用 Android 手机控制小车,不过小车估计自己是做不来了,硬件能力都荒废了。

再熟悉一下 Socket 的工作机制:

socket

1对1:

1对1的连接比较简单,服务端创建 ServerSocket,accept 阻塞线程,等待客户端的连接。

1对多:

1对多,一般都是多个客户端。

服务器端建立 ServerSocket 后,用 while(true) 一直监听客户端的新连接,while(true) 放在新的线程更好,这样主线程就可以安心处理各种事件。

一个新连接建立后,就创建一个新的线程来处理通信过程的 read, write。每一个 Socket Client 连接放到 List,这样就可以很方便的管理各个 Client。

而客户端同理,连接到服务器端后,创建一个新的线程处理通信,主线程安心处理 UI 等工作。

可以用 telnet 调试工具来帮助程序调试,事半功倍。

可中断的连接:

当连接到一个 Socket,当前线程会被阻塞,直到连接建立或者连接超时。如果你想提供更好的用户体验,这个时候就需要提供一个取消连接的功能。

用 SocketChannel,就可以在你需要的时候,断开连接。提供更好的用户体验。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据