Jadual Kandungan
一 概述" >一 概述
1.网络模型 " > 1.网络模型
2.IP协议 " > 2.IP协议
3.TCP协议 " > 3.TCP协议
4.UDP协议 " > 4.UDP协议
5.HTTP协议 " > 5.HTTP协议
6.端口port " > 6.端口port
7.套接字Socket " > 7.套接字Socket
二 TCP程序设计" >二 TCP程序设计
4.服务器的一般步骤:" > 4.服务器的一般步骤:
5.Demo" >5.Demo
客户端" >客户端
服务器" >服务器
三 UDP程序设计" >三 UDP程序设计
1.数据处理方式" > 1.数据处理方式
2.发送数据的一般步骤: " > 2.发送数据的一般步骤:
3.接收数据的一般步骤: " > 3.接收数据的一般步骤:
Rumah Java javaTutorial 关于网络通信的实例详解

关于网络通信的实例详解

Jun 25, 2017 am 09:33 AM
komunikasi rangkaian

 

一 概述

1.网络模型

OSI(Open System Interconnection,开放式系统互联)模型,是对网络系统结构的概括,将网络分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

2.IP协议

网络层协议,规定了在互联网上确定与寻找计算机的规则。

3.TCP协议

传输层的一种数据传输协议,数据传输前通过“三次握手”建立连接,然后再发送数据,适用于对数据准确性要求较高的情况,由于数据传输前需要建立连接,传输速度较慢。

4.UDP协议

传输层的一种数据传输协议,数据传输前不需要建立连接,适用于对数据准确性要求不高的情况,传输数据较快,一般聊天信息都通过该协议传输。

5.HTTP协议

HTTP协议属于应用层协议,为操作系统或网络应用程序提供访问网络服务的接口。

6.端口port

当数据到达计算机后,为了找到目标应用程序,为每一个应用程序分配了一个整数值,取值0-65535,这个整数值就是端口,从中可以看出,端口代表了计算机上一个应用程序,保证数据准确到达预定的程序。一个端口不能同时被多个应用程序占用,一个应用程序结束以后,端口不会立即释放,有一个内存延迟占有的时间,这个时间一般很短。端口、0-1023已经被系统应用程序及其他应用程序占用,程序设计时避免使用这个范围的端口。

7.套接字Socket

套接字是数据发送与接收的工具。发送者通过套接字发送数据,接受者通过套接字监听指定的端口获取数据。

8.无论采用TCP协议,还是UDP协议,数据都只能以字节形式发送。

二 TCP程序设计

1.关闭通过Socket获取的输入流或者输出流将关闭Socket。

2.通过Socket获取的输出流输出完毕后必须关闭,不然另一端对应的输入流将阻塞。由于通过输出流对象关闭输出流时,同时关闭Socket对象,将导致另一端无法获取对应Socket的对象,因此只能通过Socket下的方法shutdownOutput关闭输出流。

3.客户端的一般步骤: 

Socket socket=new Socket(String host,int port);//创建客户端Socket,发送与接收数据,需要指明服务器IP与端口OutputStream os=socket.getOutputStream();//获取输出流,向服务器发送数据..........
os.flush();
socket.shutdownOutput();//关闭输出流,防止服务器端阻塞InputStream is=socket.getInputStream();//获取输入流,输入流包含服务器的反馈信息............

socket.close();//关闭socket,同时关闭输入与输出流
Salin selepas log masuk

4.服务器的一般步骤:

ServerSocket server=new ServerSocket(int port);//建立服务器端套接字,指定监听端口Socket socket=server.accept();//获取访问客户端的Socket,阻塞线程InputStream is=socket.getInputStream();//获取输入流,其中包含客户端发送的数据.............

OutputStream os=socket.getOutputStream();//获取输出流,向客户端反馈信息..............
os.flush();
os.shutdownOutput();

server.close();
Salin selepas log masuk

5.Demo

客户端

package com.javase.networkCommunication.tcp.demo02;import java.io.FileInputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.Socket;import java.net.UnknownHostException;public class ImgClient {public static void main(String[] args) throws UnknownHostException, IOException {
        Socket socket = new Socket("192.168.146.1", 10007);
        FileInputStream is = new FileInputStream("Files/1.jpg");
        OutputStream os = socket.getOutputStream();byte[] buf = new byte[1024];// 先将数据读取到缓冲区,比频繁的从硬盘读取速度快int length = 0;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
        }
        os.flush();
        socket.shutdownOutput();// 如果输出流不关闭,服务端对应的输入流会阻塞InputStream replyIs = socket.getInputStream();//不会阻塞线程byte[] buf01 = new byte[1024];int length01 = replyIs.read(buf01);
        String reply = new String(buf01, 0, length01);
        System.out.println(reply);
        
        is.close();
        socket.close();
    }

}
Salin selepas log masuk

服务器

package com.javase.networkCommunication.tcp.demo02;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStream;import java.io.OutputStream;import java.net.ServerSocket;import java.net.Socket;import org.junit.Test;public class ImgServer {

    @Testpublic void test01() throws IOException {
        ServerSocket serverSocket = new ServerSocket(10007);
        Socket socket = serverSocket.accept();// 线程阻塞,等待请求System.out.println("hostAddress=" + socket.getInetAddress().getHostAddress());
        InputStream is = socket.getInputStream();
        FileOutputStream os = new FileOutputStream("Files/2.jpg");
        System.out.println(1);byte[] buf = new byte[1024];int length = 0;
        System.out.println(2);int count = 3;while ((length = is.read(buf)) != -1) {
            os.write(buf, 0, length);
            System.out.println(count++);
        }
        os.flush();
        os.close();
        System.out.println("图片上传结束");/*PrintWriter out = new PrintWriter(socket.getOutputStream(), true);
        out.write("success");*/OutputStream out = socket.getOutputStream();
        out.write("success".getBytes());
        out.flush();
        socket.shutdownOutput();
        System.out.println("响应数据已发出");
        
        serverSocket.close();
    }

}
Salin selepas log masuk

三 UDP程序设计

1.数据处理方式

UDP协议以数据包的形式发送数据,每个包的最大值64k。

2.发送数据的一般步骤:

DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port);
socket.send(packet);
Salin selepas log masuk

3.接收数据的一般步骤:

DatagramSocket socket=new DatagramSocket(int port);//创建监听指定端口的数据报套接字DatagramPacket packet=new DatagramPacket(byte buf[], int length);
socket.receive(packet);
Salin selepas log masuk


Atas ialah kandungan terperinci 关于网络通信的实例详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mengoptimumkan komunikasi rangkaian dalam pembangunan data besar C++? Bagaimana untuk mengoptimumkan komunikasi rangkaian dalam pembangunan data besar C++? Aug 27, 2023 am 11:54 AM

Bagaimana untuk mengoptimumkan komunikasi rangkaian dalam pembangunan data besar C++ Pengenalan: Dalam era data besar hari ini, komunikasi rangkaian memainkan peranan penting dalam pemprosesan data. Bagi pembangun yang menggunakan C++ untuk pembangunan data besar, mengoptimumkan prestasi komunikasi rangkaian adalah kunci untuk meningkatkan kecekapan pemprosesan data. Artikel ini akan memperkenalkan beberapa kaedah untuk mengoptimumkan komunikasi rangkaian dalam pembangunan data besar C++, dengan contoh kod. 1. Gunakan perpustakaan rangkaian berprestasi tinggi Dalam pembangunan data besar C++, memilih perpustakaan rangkaian berprestasi tinggi ialah langkah pertama untuk mengoptimumkan prestasi komunikasi rangkaian. Perpustakaan ini biasanya

Bagaimana untuk mencapai komunikasi penyegerakan masa rangkaian melalui protokol PHP dan NTP Bagaimana untuk mencapai komunikasi penyegerakan masa rangkaian melalui protokol PHP dan NTP Jul 28, 2023 pm 10:09 PM

Gambaran keseluruhan cara untuk mencapai komunikasi penyegerakan masa rangkaian melalui protokol PHP dan NTP: Protokol Masa Rangkaian (pendek kata NTP) ialah protokol yang digunakan untuk menyegerakkan masa sistem komputer. Dalam aplikasi rangkaian, penyegerakan masa yang tepat adalah sangat penting untuk memastikan operasi normal perkhidmatan rangkaian. Dalam PHP, penyegerakan masa rangkaian boleh dicapai dengan berkomunikasi dengan protokol NTP. Artikel ini akan memperkenalkan cara menggunakan kod PHP untuk berkomunikasi dengan pelayan NTP untuk mendapatkan masa rangkaian yang tepat. langkah

Cara membetulkan: Ralat Komunikasi Rangkaian Java: Sambungan tamat masa Cara membetulkan: Ralat Komunikasi Rangkaian Java: Sambungan tamat masa Aug 27, 2023 am 10:30 AM

Cara menyelesaikan: Ralat komunikasi rangkaian Java: tamat masa sambungan Apabila berkomunikasi dengan rangkaian Java, anda sering menghadapi ralat tamat masa sambungan. Tamat masa sambungan bermakna apabila membuat sambungan rangkaian, proses jabat tangan antara klien dan pelayan mengambil masa lebih lama daripada had masa yang telah ditetapkan. Dalam komunikasi rangkaian, ralat tamat masa sambungan mungkin disebabkan oleh pelbagai faktor, seperti kelewatan rangkaian, tindak balas pelayan yang perlahan, dsb. Artikel ini akan menerangkan cara menyelesaikan ralat tamat masa sambungan dalam komunikasi rangkaian Java dan menyediakan beberapa kod sampel. Semak sambungan rangkaian Mula-mula kita perlu

Gunakan fungsi pembangunan swoole untuk mencapai komunikasi rangkaian serentak yang tinggi Gunakan fungsi pembangunan swoole untuk mencapai komunikasi rangkaian serentak yang tinggi Aug 08, 2023 pm 01:57 PM

Gunakan fungsi pembangunan Swoole untuk mencapai komunikasi rangkaian konkurensi tinggi Ringkasan: Swoole ialah rangka kerja komunikasi rangkaian berprestasi tinggi berdasarkan bahasa PHP Ia mempunyai ciri seperti coroutine, IO tak segerak dan berbilang proses, dan sesuai untuk membangunkan tinggi-. aplikasi rangkaian concurrency. Artikel ini akan memperkenalkan cara menggunakan Swoole untuk membangunkan fungsi komunikasi rangkaian konkurensi tinggi dan memberikan beberapa contoh kod. Pengenalan Dengan perkembangan pesat Internet, keperluan untuk komunikasi rangkaian menjadi lebih tinggi dan lebih tinggi, terutamanya dalam senario konkurensi tinggi. Pembangunan PHP tradisional menghadapi keupayaan pemprosesan serentak yang lemah

Bagaimana untuk menangani masalah komunikasi rangkaian dalam C# Bagaimana untuk menangani masalah komunikasi rangkaian dalam C# Oct 09, 2023 am 09:37 AM

Cara menangani isu komunikasi rangkaian dalam C# memerlukan contoh kod khusus Komunikasi rangkaian adalah teknologi yang sangat penting dalam pengaturcaraan moden. Sama ada kita sedang membangunkan aplikasi rangkaian, permainan dalam talian atau interaksi data jauh, kita semua perlu memahami cara mengendalikan isu komunikasi rangkaian dalam C#. Artikel ini akan memperkenalkan beberapa cara biasa untuk mengendalikan komunikasi rangkaian dalam C# dan memberikan contoh kod yang sepadan. Soket TCP/IP Soket TCP/IP ialah protokol komunikasi rangkaian berorientasikan sambungan yang boleh dipercayai. Dalam C# kita boleh menggunakan System.

Subnet mask: peranan dan kesan ke atas kecekapan komunikasi rangkaian Subnet mask: peranan dan kesan ke atas kecekapan komunikasi rangkaian Dec 26, 2023 pm 04:28 PM

Peranan subnet mask dan kesannya terhadap kecekapan komunikasi rangkaian Pengenalan: Dengan populariti Internet, komunikasi rangkaian telah menjadi bahagian yang amat diperlukan dalam masyarakat moden. Pada masa yang sama, kecekapan komunikasi rangkaian juga menjadi salah satu tumpuan perhatian orang ramai. Dalam proses membina dan mengurus rangkaian, subnet mask ialah pilihan konfigurasi yang penting dan asas, yang memainkan peranan penting dalam komunikasi rangkaian. Artikel ini akan memperkenalkan peranan topeng subnet dan kesannya terhadap kecekapan komunikasi rangkaian. 1. Definisi dan fungsi subnet mask Subnet mask (subnetmask)

Cara membetulkan: Ralat Komunikasi Rangkaian Java: Gagal menghuraikan URL Cara membetulkan: Ralat Komunikasi Rangkaian Java: Gagal menghuraikan URL Aug 19, 2023 am 11:49 AM

Cara menyelesaikan: Ralat komunikasi rangkaian Java: Gagal menghuraikan URL Apabila berkomunikasi melalui rangkaian Java, anda sering menghadapi ralat yang gagal menghuraikan URL. Ralat ini biasanya berlaku semasa menghuraikan URL dan format URL yang sah tidak boleh dihuraikan dengan betul. Sebelum menyelesaikan masalah ini, kita perlu memahami beberapa konsep asas URL dan kelas alat berkaitan yang disediakan oleh Java. URL ialah singkatan dari Uniform Resource Locator, yang digunakan untuk mengenal pasti lokasi sumber pada rangkaian. URL biasanya terdiri daripada protokol, nama hos, nombor port, laluan dan pertanyaan

Cara menggunakan coroutine untuk mencapai komunikasi rangkaian yang cekap dalam bahasa go Cara menggunakan coroutine untuk mencapai komunikasi rangkaian yang cekap dalam bahasa go Aug 06, 2023 pm 07:13 PM

Cara menggunakan coroutine untuk mencapai komunikasi rangkaian yang cekap dalam bahasa GO Pengenalan: Dengan perkembangan pesat Internet, komunikasi rangkaian menjadi semakin penting. Dalam pembangunan moden, bahasa Go ialah bahasa pengaturcaraan serentak, dan keupayaan coroutine yang berkuasa menjadikan komunikasi rangkaian lebih cekap. Artikel ini bertujuan untuk memperkenalkan cara menggunakan coroutine untuk mencapai komunikasi rangkaian yang cekap dalam bahasa Go, termasuk pengaturcaraan pelayan dan klien biasa. 1. Konsep asas Sebelum membincangkan cara menggunakan coroutine untuk mencapai komunikasi rangkaian yang cekap, kita perlu terlebih dahulu memahami beberapa konsep asas, termasuk yang berikut

See all articles