java网络编程

网络编程是指编写运行在计算机的程序,这些设备都通过网络连接起来。要实现网络通信,我们要考虑几个问题:

1.如何建立两个节点(电脑)之间的网络连接?

2.如何向另外一个节点(电脑)发送信息?

3.如何从外部节点(电脑)接收一个请求并给预响应?

4.如何利用网络协议(TCP,UDP)?

 

解决上面的问题,我们需要先了解一些知识点:

1.每台电脑都有属于它自己的ip地址,用来方便电脑之间通信(ip地址是唯一的)

2.端口号:它决定我们电脑最多能同时启动多少个软件

3.端口:正在运行的程序的标识,它的范围是0-65535,想要知道这台电脑的哪个程序通信,使用ip+端口号. 

4.java.net 包中提供了两种常见的网络协议的支持:TCP和UDP协议

 

一、socket编程

java.net.Socket 类代表一个套接字

Socket原理是通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输(问题二)

实现:

套接字使用TCP提供了两台计算机之间的通信机制。 客户端程序创建一个套接字,并尝试连接服务器的套接字。

当连接建立时,服务器会创建一个 Socket 对象。客户端和服务器现在可以通过对 Socket 对象的写入和读取来进行通信。

二、TCP协议通信

TCP协议是一种面向连接的、可靠的、基于字节流的传输层通信协议.

使用TCP协议实现通信,需要使用流式套接字。即客户端采用socket,而服务器端采用ServerSocket来完成通信的方式.(问题一和四)

 1.服务端编程,步骤如下

public static void main(String[] args) throws IOException {
        //1. 创建一个ServerSocket
        ServerSocket serverSocket = new ServerSocket(7777);
         //2.调用accept(),等到客户端的连接
        Socket accept = serverSocket.accept();
        System.out.println("有客户端连接");
        //3.得到客户端的Socket对象, 调用getInputStream()  getOutputStream() 得到输入输出流
        InputStream in = accept.getInputStream();//网络流
        OutputStream out = accept.getOutputStream();

        BufferedReader br = null;
        BufferedWriter bw = null;
        //4.输入流接收数据,  输出流发送数据
        //把字节流变字符流
        br = new BufferedReader(new InputStreamReader(in));
        bw = new BufferedWriter(new OutputStreamWriter(out));

        String str = br.readLine();//得到数据
        bw.write("你好");//写数据
        bw.newLine();//换行
        bw.flush();//缓冲流需要刷新

        //5.关闭流
        bw.close();
        br.close();
        serverSocket.close();
    }

2.客户端编写步骤:

public static void main(String[] args) throws IOException {
        //1.创建一个Socket, 请求服务器地址, 端口, 与服务器进行连接      //问题三
        Socket socket = new Socket("127.0.0.1",7777);        
        //2.调用getInputStream()  getOutputStream() 得到输入输出流
        InputStream in = socket.getInputStream();
        OutputStream out = socket.getOutputStream();

        //3.输出流发送数据,输入流接收数据
        BufferedReader br = null;
        BufferedWriter bw = null;
        //将字节流转成字符流
        br = new BufferedReader(new InputStreamReader(in));
        bw = new BufferedWriter(new OutputStreamWriter(out));
        
        Scanner input = new Scanner(System.in);
        bw.write(input.next());//输入数据
        bw.newLine();
        bw.flush();

        br.readLine();//接收数据

        //4.关闭资源
        br.close();
        bw.close();
        socket.close();

    }

 

三、总结

1.TCP 是一个双向的通信协议,因此数据可以通过两个数据流在同一时间发送.

2.TCP是基于(面向)连接的协议,也就是说,在正式收发数据前,必须和对方建立可靠的连接,TCP协议建立连接需要三次握手.

3.UDP是一个无连接的协议,所以应用程序通常必须容许一些丢失、错误或重复的数据包.

4.Java为客户端提供了Socket类,为服务器端提供了ServerSocket类

5.网络编程三要素:IP地址,端口,协议

posted @ 2022-08-24 21:41  Tmillion  阅读(513)  评论(0编辑  收藏  举报