TCP Socket通信是一种比较常用的基于连接的网络通信方式。本文通过Java实现TCP Socket通信,并将其用于计算机端、Android手机端,同时做到代码规范化,实现代码最大化复用。
本文代码可在GitHub下载,建议对照源码阅读文章 https://github.com/jzj1993/JavaTcpSocket
TCP连接的建立
客户端和服务器间通过三次握手建立TCP连接。在Java中,连接建立完成后,服务器端和客户端分别获取到一个Socket实例,之后就可以通过这个Socket实例进行通信。服务器端和客户端使用不同的方法获取Socket实例。
服务器端
在服务器端,通过ServerSocket
实现对指定端口的监听,代码如下。其中port
为int
型端口数值,取值0~65535
,0~1024
为系统保留端口,这里取值1234
。如果发生错误将会抛出异常。
int port = 1234;
ServerSocket server = new ServerSocket(port);
通过ServerSocket.accept()
方法接受客户端连接。这个方法是阻塞的,从调用时开始监听端口,直到客户端连接建立时,执行结束并返回Socket实例。连接建立失败会抛出异常。
Socket socket = server.accept();
客户端
客户端直接通过实例化的形式,产生Socket实例。实例化的过程中,尝试连接指定的服务器主机。连接成功则实例化完成,连接失败则抛出异常。hostIP
为主机的IP地址,port
为端口号,和服务器主机监听的端口号保持一致。
String hostIP = "127.0.0.1";
int port = 1234;
Socket socket = new Socket(hostIP, port);
连接的建立过程
以上代码的执行顺序是: