1.背景介绍
笔者在最近的项目中需要使用到TCP连接进行数据通信,但此前笔者对于TCP通信在项目中的应用一窍不通,更别提听说到要直接用TCP连接了,当时我真的是脑子嗡了一下。不过平复了一下情绪去做了以后,发现这件事情其实并没有想象中那么困难,甚至还挺有意思的,这样一个心理的过程我觉得在面对难题的时候尤其容易产生,我们太容易害怕了,如果勇敢点,我们做了一段时间以后,甚至会笑嘻嘻地说:“嘿!我竟然会为这么个小东西害怕,太好笑了!”
这里笔者啰嗦几句,权当是热身,并不影响后续的技术介绍,热身完毕,我们该进入正题了。
2.TCP简单介绍
传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793 [1] 定义。TCP通信一般指客户端和服务端通信。
在Java中,一般使用SocketServer和Socket这两个类实现TCP通信,前者为服务端的一个实体,而后者可以认为是一种对连接的封装。一般来说,需要先启动服务端,然后客户端才能向服务端发送连接请求,连接成功后,两端就可以互相通信了。
3.Java中TCP通信流程
- 服务端:
- 创建ServerSocket对象,绑定监听端口。
- 通过accept()方法监听客户端请求。
- 连接建立后,通过输入流读取客户端发送的请求信息。
- 通过输出流向客户端发送响应信息。
- 关闭响应的资源。
- 客户端:
- 创建Socket对象,指明需要连接的服务器的地址和端口号。
- 连接建立后,通过输出流向服务器发送请求信息。
- 通过输入流获取服务器响应的信息。
- 关闭相应资源。
4.示例代码
服务端:
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.ServerSocket;
import java.net.Socket;
/**
* @author: LJ
* @description:TCP服务端简单实现
**/
public class TCP_Server {
public static void main(String[] args)throws IOException
{
//监听端口
int port = 30000;
//创建一个ServerSocket, 用于监听客户端Socket的连接请求
ServerSocket serverSocket = new ServerSocket(port);
System.out