TCP通信
1、TCP概述
TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的协议。
TCP不同于UDP,TCP严格区分客户端和服务器端,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以去主动连接客服端,并且服务器端程序需要事先启动,等待客户端的连接。
在jdk中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个Socket类,用于表示客户端。
通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器发送连接请求,服务器端相应请求,两者建立开始通信。
2、ServerSocket
ServerSocket类的构造方法:
ServerSocket(int port):创建绑定到特定端口的服务器套接字。
常用方法:
Socket accept():侦听并接受到此套接字的连接。
InetAddress getInetAddress():返回此服务器套接字的本地地址。
3、Socket
Socket类构造方法:
Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。
Socket(InetAddress address, int port):创建一个流套接字并将其连接到指定IP地址的指定端口号。
常用方法:
- int getPort():返回一个int类型对象,该对象是Socket对象与服务器端连接的端口号
- InetAddress getLocalAddress():用于获取Socket对象绑定的本地IP地址,并将IP地址封装成InetAddress类型的对象返回。
- void close():关闭Socket连接,结束本次通信。在关闭Socket之前,应将Socket相关的所有的输入/输出流全部关闭。
- InputStream getInputStream():返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据。
- OutputStream getOutputStream():返回一个OutputStream类型的输出流对象,如果该对象有服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据。
4、TCP网络程序
服务器端
1 package tcp; 2 3 import java.io.IOException; 4 import java.io.OutputStream; 5 import java.net.ServerSocket; 6 import java.net.Socket; 7 8 /** 9 * <p>Description:TCP通信服务器端 </p> 10 * @author Administrator 11 * @date 2018年11月6日下午4:06:33 12 */ 13 public class TCPServer { 14 15 public static void main(String[] args) throws IOException { 16 // 创建服务器ServerSocket对象(指定服务器端口号) 17 ServerSocket ss = new ServerSocket(8888); 18 // 开启服务器了,等待客户端连接,连接后可以获取服务器端的客户端Socket对象 19 Socket s = ss.accept(); 20 // 获取客户端的输出流 21 OutputStream os = s.getOutputStream(); 22 // 在服务器端,通过客户端的输出流写数据给客户端 23 os.write("连接服务器成功".getBytes()); 24 // 关闭资源 25 os.close(); 26 } 27 28 }
客户端
1 package tcp; 2 3 import java.io.IOException; 4 import java.io.InputStream; 5 import java.net.Socket; 6 import java.net.UnknownHostException; 7 8 /** 9 * <p>Description:TCP通信客户端 </p> 10 * @author Administrator 11 * @date 2018年11月6日下午4:14:21 12 */ 13 public class TCPClient { 14 15 public static void main(String[] args) throws UnknownHostException, IOException { 16 // 创建客户端Socket对象(要指定连接服务器地址与端口号) 17 Socket s = new Socket("192.168.247.1", 8888); 18 // 获取服务器端反馈回来的信息 19 InputStream is = s.getInputStream(); 20 // 获取流中的数据 21 byte[] buffer = new byte[1024]; 22 // 把流中的数据存储到数组中,并记录读取字节的个数 23 int length = is.read(buffer); 24 // 显示数据 25 System.out.println(new String(buffer, 0, length)); 26 // 关闭资源 27 is.close(); 28 s.close(); 29 } 30 31 }