Socket适用场景:
- 网络游戏,银行交互,支付。
优点:
- 传输数据为字节级,传输数据可自定义,数据量小。相应的移动端开发,手机费用低;
- 传输数据时间短,性能高;
- 适合C/S之间信息实时交互;
- 可以加密,数据安全性高
缺点:
- 需要对传输的数据进行解析,转化为应用级的数据;
- 对开发人员的开发水平要求高;
- 相对于Http协议传输,增加了开发量
Socket 的基本操作:
- 连接远程机器;
- 发送数据;
- 接收数据;‰
- 关闭连接;
- 绑定端口;
- 监听到达数据 ;
- 在绑定的端口上接受来自远程机器的连接。
常用的构造客户端 Socket 的方法有以下几种:
- Socket():创建一个新的未连接的 Socket;
- Socket(Proxy proxy):使用指定的代理类型创建一个新的未连接的 Socket;
- Socket(String dstName,int dstPort) :使用指定的目标服务器的 IP 地址和目标服务器 的端口号,创建一个新的 Socket;
- Socket(String dstName,int dstPort,InetAddress localAddress,int localPort) :使用指定的目标主机、目标端口、本地地址和本地端口,创建一个新的 Socket;
- Socket(InetAddress dstAddress,int dstPort) :使用指定的本地地址和本地端口,创建 一个新的 Socket;
- Socket(InetAddress dstAddress,int dstPort,InetAddress localAddress,int localPort) :使 用指定的目标主机、目标端口、本地地址和本地端口,创建一个新的 Socket。
其中,proxy 为代理服务器地址,dstAddress 为目标服务器 IP 地址,dstPort 为目标服 务器的端口号(因为服务器的每种服务都会绑定在一个端口上面),dstName 为目标服务器 的主机名。
Socket 类重要方法:
- Public InputStream getInputStream() 读出该 Socket 中的数据 ;
- public OutputStream getOutputStream() 向该 Socket 中写入数据;
public synchronized void close() 关闭该 Socket。
TCP 客户端工作的主要步骤如下:
- 步骤 1 调用 Socket() 创建一个流套接字,并连接到服务器端。
- 步骤 2 调用 Socket 类的getOutputStream() 和 getInputStream() 方法获取输出和输入 流,开始网络数据的发送和接收。
- 步骤 3 关闭通信套接字。
一个简单的socket 客户端通信代码:
try {
// 初始化 Socket,TCP_SERVER_PORT 为指定的端口,int 类型
Socket socket = new Socket("localhost", 80);
// 获取输入流
BufferedReader in = new BufferedReader(new
InputStreamReader(socket.getInputStream()));
// 生成输出流
BufferedWriter out = new BufferedWriter(new
OutputStreamWriter(socket.getOutputStream()));
// 生成输出内容
String outMsg = "TCP connecting to " + 80 +
System.getProperty("line.separator");
// 写入
out.write(outMsg);
// 刷新,发送
out.flush();
// 获取输入流
String inMsg = in.readLine() + System.getProperty("line.separator");
Log.i("TcpClient", "received: " + inMsg);
// 关闭连接
socket.close();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
在 Android 配置文件中需要添加下面的权限:
android.permission.INTERNET。
小结
以上就是简单的Sockey通信客户端编程。且只是入门。。。
socket 最核心的部分是 通信协议的设计 基于socket简单通信协议实现。
杂言:
两个开源的框架不错,一个是apache mina 还有个是netty。
Socket的3次握手链接与4次断开握手