多线程(五)TCP通信 1.TCP通信 2Socket类 3ServerSocket类 4.简单的TCP网络程序

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

TCP通信同UDP通信一样,都能实现两台计算机之间的通信,通信的两端都需要创建socket对象。

区别在于,UDP中只有发送端和接收端,不区分客户端与服务器端,计算机之间可以任意地发送数据。

而TCP通信是严格区分客户端与服务器端的,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以主动连接客户端,并且服务器端程序需要事先启动,等待客户端的连接。

 

2Socket类

用于实现TCP客户端程序。

2.1构造方法

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

此方法参数第一个是字符串类型的ip地址,第二个是端口号

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

 此方法参数第一个是Inetaddress类型的对象,其中也封装了ip地址,第二个是端口号

2.2常用方法

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

该方法返回一个int类型的数值,是一个端口号

 多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

 该方法返回的是一个Inetaddress类型的ip地址值

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

该方法返回一个InputStream类型的输入流对象,如果该对象是由服务器端的Socket返回,就用于读取客户端发送的数据,反之,用于读取服务器端发送的数据

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

 该方法返回一个OutputStream类型的输出流对象,如果该对象是由服务器端的Socket返回,就用于向客户端发送数据,反之,用于向服务器端发送数据

在Socket类的常用方法中,getInputStream()和getOutStream()方法分别用于获取输入流和输出流。当客户端和服务端建立连接后,数据是以IO流的形式进行交互的,从而实现通信。


多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

释放资源

 

3ServerSocket类

3.1构造方法

 多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

参数用来确定端口号

3.2常用方法

多线程(五)TCP通信
1.TCP通信
2Socket类
3ServerSocket类
4.简单的TCP网络程序

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 }