简述:

网络编程必不可少,很多程序需要通过访问服务器来获取数据,即访问服务器并建立链接;但是对于Java有一大好处是:底层链接操作已经完成,只需要执行高层动作即可,即建立链接。建立链接其中之一方法就是使用到Socket类;但是需要注意一点:创建Socket对象需要知道两点,其一是目的的ip地址,其二目的的端口。注意一点的是,虽然端口共有65536端口,但其中0~1023端口已经被一些一直服务器所占用。

Socket类介绍:
实际上Socket对象是客户端(client)与服务器(server)之间通信对象,即网络链接之间的对象,代表了两台机器之间的关系,通过软件等相互识别对方。

使用BufferedReader缓冲区来获取Socket底层的串流,实际上对于Java来说,很多时候无需考虑串流来自何方,即不管是来自本地文件,还是网络资源或Socket对象,只需要考虑如何获取串流即可。但是使用缓冲区必须首先建立起BufferedReader与Socket的串流链接,即通过InputStreamReader将两者链接起来使用。

使用Socket一旦成功建立链接,客户端便可从Socket对象中获取串流数据。

对于如何写入信息到Socket对象,可以使用BufferedWriter,也可以使用PrintWriter,但是这里推荐使用PrintWriter来将信息写入到Socket对象中,其原因是写入是一个String,所以才推荐使用最标准的PrintWriter,其次PrintWriter中print()和println()与System.out中两者相似用法。
(PrintWirter字符数据和字节间的转换桥梁,也就是说可以链接String和Socket两端。)

Socket通信模型

android 本地套接字_客户端


客户端:

1.声明Socket通信对象。

2.发送请求连接。

3.当与服务器建立连接的时候,写入请求信息。

4.从服务器响应回来的socket对象获取数据。

5.结束通信,断开连接。

服务器:
1.监听端口,并绑定Socket对象。
2.接受从客户端的请求。
3.响应客户端请求。
4.根据客户端选择是否断开连接。

一个循环完成代表一个数据交换的完成过程。

Socket中TCP三次握手:
1.客户端connect()发送连接请求信息SYN A,此时connect()进入阻塞状态。
2.服务器accept()接受了请求信息SYN A,向客户端发送信息SYN B,ACK A+1确认码,此时connect()进入阻塞状态。
3.客户端给接受了服务器返回的ACK A+1确认码,此时connect()返回ACK B+1确认码,等待连接。
4.服务器接受到ACK B+1,返回connect(),正式建立连接。

android 本地套接字_客户端_02

那么开始在Java中使用Socket吧!

客户端:

android 本地套接字_android 本地套接字_03


服务器:

android 本地套接字_java_04


结果:

android 本地套接字_android 本地套接字_05


android 本地套接字_客户端_06