沈汉学

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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 }
posted on 2021-07-31 11:52  沈汉学  阅读(180)  评论(0编辑  收藏  举报