一、基于TPC的Socket通信服务端
1、使用ServerSocket实例化一个服务端Socket对象,参数为监听的端口号
2、调用ServerSocket.accept方法监听客户端的请求
该方法会在收到客户端请求前一直阻塞,直到收到了客户端消息,并且该方法的返回值是一个
Socket对象
3、实例化一个InputStream对象用于接收来自客户端消息,并使用接受到的Socket对象的Socket.getInputStream方法获取,在和客户相对应的是OutputStream对象所发送
4、利用bytes将InputStream 对象转化为String字符串
5、实例化一个OutputStream 对象用于向客户端发送消息,并用上文接收到的Socket对象的Socket.getOutputStream 方法进行初始化,在客户端对应是InputStream 所接收到
6、使用OutputStream.write 方法将想要发送消息的bytes写入并发送,发送完成后使用OutputStream.close关闭对象
可以将上述逻辑写在一个循环中以便持续接收消息
二、基于TCP的Socket通信客户端
1、使用socket首先需要声明网络权限,即android.permission.INTERNET ,否则无法正常使用Socket
2、由于安卓中主线程是无法联网的,所以需要将socket逻辑写在新创建的线程中
3、使用Socket实例化一个Socket对象
4、实例化一个SocketAddress对象,并用InetSocketAddress 初始化,其参数为ip地址和通信端口,这里的端口为服务端监听端口
5、使用Socket.connect 方法连接服务器,参数分别为上面实例化的SocketAddress对象和超时时间,并且使用Socket.isConnected可以检查是否连接成功
也可以使用直接把ip和端口作为参数直接实例化Socket对象,但是这种方式如果连接失败将阻塞很长时间,使用connect进行连接的好处是可以设置超时时间,避免长时间阻塞
6、实例化一个OutputStream对象,并使用上面初始化的socket对象的Socket.getOutputStream 方法初始化实例,并使用OutputStream.write方法想服务端发送消息
7、实例化一个BufferedReader对象,并用BufferedReader来进行初始化,其参数InputStreamReader对象,并以Socket.getInputStream作为参数来获取服务端消息
8、使用上面实例化的BufferedReader对象的BufferedReader.readLine方法获取服务端发来的消息。该方法时阻塞的,也就是说直到服务端发来消息才会继续执行




