highlight: a11y-dark
JavaTCP
TCP通信程序
- TCP通信原理
TCP通信协议是一种可靠的网络协议,它在通信的两端(客户端,服务端)各建立一个Socke对象,从而在通信的两端形成网络虚拟链路,然后再传输数据,它提供了两台计算机之间可靠无差错的数据传输,在TCP连接中由客户端向服务端发送连接请求,每次连接的创建都要需要经历三次握手。
| 三次握手 | |
|---|---|
| 第一次 | 客户端向服务端发送连接请求,等待服务器确认 |
| 第二次 | 服务器向客户端回送一个响应,通知客户端收到了连接请求 |
| 第三次 | 客户端再次向服务器发送确认信息,确认连接 |
Java对基于TCP协议的网络提供了良好的封装,使用Socket对象代表两端的通信接口,并通过Socket产生IO流来进行网络通信,java为客户端提供了Scoket类,为服务端提供了SeverSocket类
- TCP发送数据
Socket类实现客户端套接字(也称为套接字),套接字是两台机器之间通讯的端点。
套接字的实际工作由SocketImol类的实例执行,应用程序通过更改创建套接字实现套接字工厂,可以配置自己创建适合本地防火墙的套接字
- Socket类主要的构造方法:
备注:Port(端口号),host(主机IP地址)。
Socket()----------创建一个未连接的套接字,并使用系统默认类型的SocketImpl
Socket so=new Socket();
Socket(InetAddress address,int port)---------创建流套接字并将其连接到指定IP地址的指定端口号
Socket soo=new Socket(InetAddress.getByName( "192.168.1.66" ),10000);
Socket(String host,int port)--------------创建套接字并将其连接到指定远程端口上的指定远程主机
Socket so=new Socket( "192.168.7.186" ,10010);
备注:第二个构造方法和第三个做的工作是一样的,底层会自动将第三构造方法转化为第二构造方法的那种形式
- TCP接收数据
ServerSocket
这个类实现了服务器套接字。服务器套接字等待通过网络进入的请求。它根据该请求执行一些操作,然后可能将结果返回给请求者
服务器套接字的实际工作由SocketImpl类的实例执行,应用程序可以更改创建的套接字实现的套接字工厂,以配置自己创建适合本地防火墙的套接字
1. SeverSocket主要构造方法:
ServerSocket() ----------创建未绑定的服务器套接字
ServerSocket ss=new ServerSocket();
SeverSocket(int port) ----------创建绑定到指定端口的服务器套接字
ServerSocket ss=new ServerSocket(10000);
2. SeverSocket方法:
Socket accept()----------侦听到要连接到此的套接字并接收它
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();
3.IO与Socket
| Socket_IO | 作用 |
|---|---|
| getInputStream() | 返回此套接字输入流 |
| getOutputStream() | 返回此套接字输入流 |
public class TCP_Demo2 {
public static void main(String[] args) throws IOException {
//创建绑定到端口的服务器套接字
ServerSocket ss=new ServerSocket(10000);
Socket s=ss.accept();//侦听到连接到此套接字并接收它
//获取输入流,并读数据
InputStream is=s.getInputStream();
byte [] b=new byte[1024];
int lne=is.read(b);
String date=new String(b,0,lne);
System.out.println(date);
ss.close();
}
}
public class TCP_demo {
//客户端与网络端建立虚拟网络链
// TCP发送端和接受段建立逻辑关系
public static void main(String[] args) throws IOException {
//创建服务端的Socket对象
Socket so=new Socket("192.168.125.186",10000);
// 返回此套接字的输入流。
OutputStream os=so.getOutputStream();
os.write("牛马".getBytes());
so.close();
}
}
注意:
1.TCP发送数据(客户端)和TCP接受数据(服务端)的端口(port)要相同 2.端口是设备是应用程序的唯一标识。端口号在普通应用程序上取1024以上的整数作为端口号0~1023之间的端口号主要用于一些知名的网络服务和应用 3.在实操中,要先去运行服务端,再去运行客户端。