1.TCP通信
TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。
区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。
而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。
2Socket类
用于实现TCP客户端程序。
2.1构造方法
此方法参数第一个是字符串类型的ip地址,第二个是端口号
此方法参数第一个是Inetaddress类型的对象,其中也封装了ip地址,第二个是端口号
2.2常用方法
该方法返回一个int类型的数值,是一个端口号
该方法返回的是一个Inetaddress类型的ip地址值
该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据
该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据
在Socket类的常用方法中,getInputStream()和getOutStream()方法分别用于获取输入流和输出流。当客户端和服务端建立连接后,数据是以IO流的形式进行交互的,从而实现通信。
释放资源
3ServerSocket类
3.1构造方法
参数用来确定端口号
3.2常用方法
accept()方法,用来接收来自客户端的请求
当执行了accept()方法之后,服务器端程序会发生阻塞,直到客户端发出连接请求,accept()方法才会返下执行。
4.简单的TCP网络程序
客户端:
1 //客户端 2 public class TCPLX { 3 public static void main(String[] args) throws UnknownHostException, IOException { 4 //创建客户端对象,明确要链接的服务器端的ip地址和端口号 5 Socket socket = new Socket("127.0.0.1",8000); 6 //创建字节输出流,目的地是服务器端 7 OutputStream os = socket.getOutputStream(); 8 //写出字节 9 os.write("你好".getBytes()); 10 11 //接收客户端的回复 12 //获取字节输入流,数据源是服务器 13 InputStream in = socket.getInputStream(); 14 byte[] bytes = new byte[1024]; 15 int len = in.read(bytes); 16 String ip = socket.getInetAddress().getHostAddress(); 17 System.out.println("ip"+ip+"内容"+new String(bytes,0,len)); 18 //释放资源 19 socket.close(); 20 } 21 }
服务器端:
1 //服务器端 2 public class TCPLX2 { 3 public static void main(String[] args) throws IOException { 4 //创建服务器对象,明确端口号 5 ServerSocket server = new ServerSocket(8000); 6 //创建与客户端链接,并获取与之链接的客户端对象 7 Socket socket = server.accept(); 8 //获取字节输入流,数据源是客户端 9 InputStream in = socket.getInputStream(); 10 //读取字节 11 byte[] bytes = new byte[1024]; 12 int len = in.read(bytes); 13 //获取ip 14 String ip = socket.getInetAddress().getHostAddress(); 15 System.out.println("ip:"+ip+"内容:"+new String(bytes,0,len)); 16 17 //回复客户端 18 //获取字节输出流,目的地是客户端 19 OutputStream os = socket.getOutputStream(); 20 os.write("收到".getBytes()); 21 //释放资源 22 socket.close(); 23 } 24 }