Technology sharing

Java Provectus Key Scientia Points-23-Network Programming

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

Introductio ad network programmatio

software structure

  • C/S compages: Plenum nomen est Client/Servi structura, quae ad clientem et servientem structuram refertur.
  • B/S compages: Plenum nomen est navigatro/Servi structura, quae ad navigatrum et servientem structuram refertur.

Protocol communicationis retis

网络通信协议:通信协议是对计算机必须遵守的规则,只有遵守这些规则,计算机之间才能进行通信。

  • TCP/IP protocol: Transmissio Imperium Protocollum/Protocollum Internet (Transmissio Imperium Protocollum/Internet Protocol) est
    Protocollum interreti fundamentalis et diffusa est.
    Insert imaginem descriptionis hic

Protocollum partitio

java.net 包中提供了两种常见的网络协议的支持

  1. TCP: Transmissio Imperium Protocollum. Protocollum TCP est protocollum communicationis ordinatum nexum, id est, antequam notitias transmittat, connexio logica constituitur inter finem mittendi et finem recipiendi, et postea notitia transmittitur risus.
  2. UDP: User Datagram Protocollum. Protocollum UDP protocollum nexus est. Cum notitia transmittendi, non opus est nexum constituere. Nihilominus utrum incepto sit alterius partis officium, notitia, fons et destinatio notitiae directe insculpuntur in notitia fasciculi et directe emissi. Magnitudo cuiusque fasciculi ad 64k contrahitur. Protocollum ambigui est quia nexus non est, ideo celeritas transmissio celeris est, sed notitia facile amittitur.

Three-way handshake in TCP: In protocollo TCP, in spectaculo mittendi notitias, tres sunt interactiones inter clientem et ministrum ut fides nexus invigilet.

  • In prima handshake, cliens petitionem nexum mittit servo et confirmat confirmationem a servo.
  • In secunda handshake, servo responsum clienti remittit, certiorem facit clientem petitionem nexum receptam esse.
  • In tertia handshake, cliens informationes confirmationis mittit ministro rursus ad nexum confirmandum.

Tria elementa programmandi retis

  1. Protocollum: Praecepta quae communicationis socialis retiacula computatrum stare debent
  2. IP inscriptio: Refertur ad Inscriptio Protocollum Interreti, vulgo IP. Inscriptiones IP adhibitae sunt unice machinis computatoriis in retis.
  • IPv4: Est numerus binarius 32-bit, plerumque in 4 bytes divisus, forma abcd expressus, ut 192.168.65.100. Inter eos a, b, c et d omnes integri decimales inter 0 et 255 sunt, ita usque ad 4.2 miliarda repraesentari possunt.
  • Utens inscriptionem longitudinis 128 frenum, singulus numerus 16 bytes in 8 circulos numerorum hexadecimalium dividitur, qui ut ABCD:EF01:2345:6789:ABCD:EF01:2345:6789 solvit, quae problema de facultatibus retis insufficiens solvit. .
    Communiter mandata:
  • ipconfig [Vide locum IP oratio]
    Insert imaginem descriptionis hic
  • Ping spatium IP oratio [reprehendo an reticulum conectitur]
  1. Portum numerus
  • Integrum binis bytes repraesentatum, ejus valoris ambitus est 0~65355.Inter eos, numeri portus inter 0 et 1023 a quibusdam reticulis notis utuntur
    Retis officia et applicationes, applicationes ordinariae numero portuum uti necesse est supra 1024 . Si numerus portus occupatur alia opera vel applicatione, programmata hodierna non incipiunt.
    COGNOSCO processus in network: 协议 + IP地址 + 端口号

TCP programmata communicationis

TCP通信能实现两台计算机之间的数据交互,通信的两端,要严格区分为客户端(Client)与服务端(Server)。

Vestigia Communicationis

  • Programma server debet in antecessum et nexum huius observat.
  • Cliens actuose cum servo coniungit et communicare potest tantum si nexus succedit. Servus ad clientem active coniungere non potest.

In Java, duo genera praebentur ad programmata communicationis TCP exsequendam:

  1. Client: Repraesentatur per java.net.Socket class. Scopum crea obiectum, nexum petitionem mitte servo, server petitioni respondet, et duo nexum constituunt et communicationem incipiunt.
  2. Servo: repraesentatur per java.net.ServerSocket class. Objectum ServerSocket creando aequivalet ut munus incipiens et clientem ad coniungere exspectans.

Socket class

Socket 类:该类实现客户端套接字,套接字指的是两台设备之间通讯的端点。
Modus constructio:
public Socket(String host, int port) : nervum creat, et nectit ad certum portum numerum in certum exercitum. Si designatus hospes nullus est, aequivalet oratio certa cum loopback electronica (Oratio loopback (127.xxx) est oratio loci loopback (Inscriptio Loopback))。
Socius modi:

  • public InputStream getInputStream() : redit input torrens pro hoc nervum.
  • public OutputStream getOutputStream() : Redit output rivus pro hoc nervum.
  • public void close() : nervum hoc claude.
  • public void shutdownOutput() : Output stream for this nervum Disables.

ServerSocket classis

ServerSocket 类:这个类实现了服务器套接字,该对象等待通过网络的请求。
Modus constructio:
public ServerSocket (int portum): Hoc machinator utere ad ligandum monstratorem cum obiecto ServerSocket creando.
Portus in certo numero, modulus portus est numerus portus.
Socius modi:
public Socket accept() : Audi et accipe nexus et redde novum obiectum nervum pro communicatione cum cliente.hoc modo
Obstructionum dum connexio constiterit.

Simplex TCP network progressio

TCP analysis communicationis:

  1. [Servo] Satus, ServerSocket crea obiectum, et nexum exspecta.
  2. [Client] Satus, crea obiectum nervum, et nexum pete.
  3. [servo] nexum accipit, modum acceptum vocat et obiectum nervum reddit.
  4. [Client] Socket obiectum, OutputStream obtinet, et data servo scribit.
  5. [Serv] Obiectum Socket, InputStream obtinet, et notitias a cliente missas legit.
  6. [Servo] Obiectum Socket, OutputStream obtinet, et notitias ad clientem remittit.
  7. [Client] Scoket objectum obtinet InputStream, parses et data rescribens.
  8. [Client] Dimitte facultates et disiunge.

Exemplum codicis:

  • Service-Terminal:
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;

public class ServerTCP {
    public static void main(String[] args) throws IOException {
        System.out.println("服务端启动 , 等待连接 .... ");
        // 1.创建 ServerSocket对象,绑定端口,开始等待连接
        ServerSocket ss = new ServerSocket(6666);
        // 2.接收连接 accept 方法, 返回 socket 对象.
        Socket server = ss.accept();
        // 3.通过socket 获取输入流
        InputStream is = server.getInputStream();
        // 4.一次性读取数据
        // 4.1 创建字节数组
        byte[] b = new byte[1024];
        // 4.2 据读取到字节数组中.
        int len = is.read(b);
        // 4.3 解析数组,打印字符串信息
        String msg = new String(b, 0, len);
        System.out.println(msg);
        //5.关闭资源.
        is.close();
        server.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

Servus numerum portum designat, per modum accepti obiecti nervum obtinet, input flumen per obiectum clientis obtinet, et demum notitias legit et nuntium missum ab cliente expectat.

  • clientis
import java.net.Socket;

public class ClientTCP {
    public static void main(String[] args) throws Exception {
        System.out.println("客户端 发送数据");
        // 1.创建 Socket ( ip , port ) , 确定连接到哪里.
        Socket client = new Socket("localhost", 6666);
        // 2.获取流对象 . 输出流
        OutputStream os = client.getOutputStream();
        // 3.写出数据.
        os.write("你好么? tcp ,我来了".getBytes());
        // 4. 关闭资源 .
        os.close();
        client.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

Cum client creatur, IP oratio et portum numerum iunctio ad faciliorem nexum cum servo denota, output stream and output data per conseque clientem Socket object.
Insert imaginem descriptionis hic

Fasciculi fasciculi [Extended]

  1. [Client] Input stream, file notitia ex rigido in programma lege.
  2. [Client] Output stream, scribe fasciculum data servo.
  3. [Servo] Input stream, file data lege programmata servo.
  4. [Servo] Output stream, scribe fasciculum data ad orbem rigidum servo.
  5. [Serve] Get output stream et data rescribe.
  6. [Client] Accipe input flumen et parse et data rescribe.

数据准备:Pone tabellam test.jpg sub D coegi et test folder

Exemplum codicis:

  • Servo
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;

public class FileUpload_Server {
    public static void main(String[] args) throws IOException {
        System.out.println("服务器 启动..... ");
        // 1. 创建服务端ServerSocket
        ServerSocket serverSocket = new ServerSocket(6666);
        // 2. 循环接收,建立连接
        while (true) {
        Socket accept = serverSocket.accept();
            /* 3. socket对象交给子线程处理,进行读写操作Runnable接口中,只有一个run方法,使用lambda表达式简化格式 */
            new Thread(() -> {
                try (   //3.1 获取输入流对象
                        BufferedInputStream bis = new BufferedInputStream(accept.getInputStream());
                        //3.2 创建输出流对象, 保存到本地 .
                        FileOutputStream fis = new FileOutputStream("D:/test/" + System.currentTimeMillis() + ".jpg");
                        BufferedOutputStream bos = new BufferedOutputStream(fis)) {
                    // 3.3 读写数据
                    byte[] b = new byte[1024 * 8];
                    int len;
                    while ((len = bis.read(b)) != -1) {
                        bos.write(b, 0, len);
                    }

                    // 4.=======信息回写===========================
                    System.out.println("back ........");
                    OutputStream out = accept.getOutputStream();
                    out.write("上传成功".getBytes());
                    out.close();

                    //5. 关闭 资源
                    bos.close();
                    bis.close();
                    accept.close();
                    System.out.println("文件上传已保存");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }).start();
        }
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44

Hic primum servo objectum creamus, utere dum (verum est) ut continuum nexum cum servo curet, et deinde filum ut cum user fasciculorum fasciculorum magnae imponat, efficientia aliorum utentium fasciculorum non afficiatur. Utere systemate milliseconds + '.jpg' ut nomen tabellae curet ut nomen tabella overscripta non ex eodem nomine fasciculi in onerationis.

  • clientis
import java.io.*;
import java.net.Socket;

public class FileUpload_Client {
    public static void main(String[] args) throws IOException {
        // 1.创建流对象
        // 1.1 创建输入流,读取本地文件
        BufferedInputStream bis = new BufferedInputStream(new FileInputStream("D:\test.jpg"));
        // 1.2 创建输出流,写到服务端
        Socket socket = new Socket("localhost", 6666);
        BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
        //2.写出数据.
        byte[] b = new byte[1024 * 8 ];
        int len ;
        while (( len = bis.read(b))!=-1) {
            bos.write(b, 0, len);
        }
        // 关闭输出流,通知服务端,写出数据完毕
        socket.shutdownOutput();
        System.out.println("文件发送完毕");   
        // 3. =====解析回写============
        InputStream in = socket.getInputStream();
        byte[] back = new byte[20];
        in.read(back);
        System.out.println(new String(back));
        in.close();
        // ============================
        // 4.释放资源
        socket.close();
        bis.close();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

Insert imaginem descriptionis hic
Insert imaginem descriptionis hic
Hic videre possumus nostrum servitorem feliciter servavisse tabellam ab usore ad orbem rigidum missam.

Java amantes gratissimi sunt ut de articulo discas. . .