一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第18天,点击查看活动详情。
TCP协议
使用TCP协议通信的双方必须先建立连接,然后才能开始数据的读写。双方都必须为该连接分配必要的内核资源,以管理连接的状态和连接上数据的传输。TCP连接是全双工的,即双方的数据读写可以通过一个连接进行。完成数据交换之后,通信双方都必须断开连接以释放系统资源。
TCP协议的这种连接是一对一的,所以基于广播和多播(目标是多个主机地址)的应用程序不能使用TCP服务。而无连接协议UDP则非常适合于广播和多播。
字节流服务和数据报服务的这种区别对应到实际编程中,则体现为通信双方是否必须执行相同次数的读、写操作
1.1 TCP通信原理
- TCP通信协议是一种可靠的网络协议, 它在通信的两端名建立一个Socke对象, 从而在通信的两端形成网络虚拟链路
- 一旦建立了 虚拟的网络链路,两端的程序就可以通过虚拟链路进行通信
- Java对基于TCP协议的的网络提供了良好的封装,使用Socket对象来代表两端的通信端口,并通过Socket产生l0流来进行网络通信
- Java为客户端提供了Socket类,为服务器端提供了ServerSocket类
2.2 TCP发送数据
- 发送数据的步骤
- 1、创建客户端的Socket对象(Socket):
Socket(String host, int port) - 2、获取输出流,写数据:
OutputStream对象的getOutputStream()方法 - 3、释放资源:
void close()
- 1、创建客户端的Socket对象(Socket):
- 范例:
package test;
import java.io.IOException;
import java.io.OutputStream;
import java.net.Socket;
public class ClientDemo {
public static void main(String[] args) throws IOException {
//1、创建客户端的Socket对象(Socket):Socket(String host, int port)
Socket s = new Socket("127.0.0.1",1000);
//2、获取输出流,写数据:OutputStream对象的getOutputStream()方法
OutputStream os = s.getOutputStream();
os.write("hello,java".getBytes());
//3、释放资源:void close()
s.close();
}
}
1.3 TCP接收数据
-
接收数据的步骤
- 1、创建服务 器端的Socket对象(ServerSocket):
ServerSocket(int port) - 2、监听客户端连接, 返回个Socket对象:
Socket accept() - 3、获取输入流, 读数据,并把数据显示在控制台:
InputStream对象的getInputStream()方法 - 4、释放资源:
void close()
- 1、创建服务 器端的Socket对象(ServerSocket):
-
范例
package test;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
public class SeverDemo {
public static void main(String[] args) throws IOException {
//1、创建服务 器端的Socket对象(ServerSocket):ServerSocket(int port)
ServerSocket ss = new ServerSocket(1000);
//2、监听客户端连接, 返回个Socket对象:Socket accept()
Socket s = ss.accept();
//3、获取输入流, 读数据,并把数据显示在控制台:InputStream对象的getInputStream()方法
InputStream is = s.getInputStream();
byte[] bys = new byte[1014];
int len = is.read(bys);
String data = new String(bys,0,len);
System.out.println(data);
//4、释放资源:void close()
s.close();
ss.close();
}
}