一概述
# 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,同时关闭输入与输出流
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();
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(); } }
##伺服器
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(); } }
DatagramSocket socket=new DatagramSocket();//创建数据报套接字用于发送数据//DUP协议采用数据包分段发送数据,因此需要建立数据包,在数据包中指明目的地IP与端口DatagramPacket packet= DatagramPacket(byte buf[], int offset, int length,InetAddress address, int port); socket.send(packet);######### 3. 接收資料的一般步驟: ### ######
DatagramSocket socket=new DatagramSocket(int port);//创建监听指定端口的数据报套接字DatagramPacket packet=new DatagramPacket(byte buf[], int length); socket.receive(packet);############
以上是關於網路通訊的實例詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

如何优化C++大数据开发中的网络通信?引言:在当今大数据时代,网络通信在数据处理中起着至关重要的作用。对于使用C++进行大数据开发的开发人员来说,优化网络通信的性能是提高数据处理效率的关键。本文将介绍一些优化C++大数据开发中网络通信的方法,并附带代码示例。一、使用高性能网络库在C++大数据开发中,选择一个高性能的网络库是优化网络通信性能的第一步。这些库通常

如何通过PHP与NTP协议实现网络时间同步通信概述:网络时间协议(NetworkTimeProtocol,简称NTP)是用于同步计算机系统时间的一种协议。在网络应用中,准确的时间同步对于确保网络服务的正常运行非常重要。在PHP中,通过与NTP协议进行通信,可以实现网络时间的同步。本文将介绍如何使用PHP代码与NTP服务器进行通信,获取准确的网络时间。步骤

如何解决:Java网络通信错误:连接超时在进行Java网络通信时,经常会遇到连接超时的错误。连接超时是指在建立网络连接时,客户端与服务器之间的握手过程花费的时间超过了预设的时间上限。在网络通信中,连接超时错误可能会由多个因素引起,例如网络延迟、服务器响应速度慢等。本文将介绍如何解决Java网络通信中的连接超时错误,并提供一些示例代码。检查网络连接首先,我们需

如何解决:Java网络通信错误:解析URL失败在进行Java网络通信时,经常会遇到解析URL失败的错误。这个错误通常发生在对URL进行解析时,无法正确地解析出有效的URL格式。在解决这个问题之前,我们需要了解一些基本的URL概念和Java提供的相关工具类。URL是统一资源定位符的缩写,用于标识资源在网络上的位置。一个URL通常由协议、主机名、端口号、路径和查

C#中如何处理网络通信问题,需要具体代码示例网络通信在现代编程中是一项非常重要的技术。无论是开发网络应用程序、网络游戏还是进行远程数据交互,我们都需要了解如何在C#中处理网络通信问题。本文将介绍C#中处理网络通信的一些常见方式,并提供相应的代码示例。TCP/IP套接字TCP/IP套接字是一种可靠的、面向连接的网络通信协议。在C#中,我们可以使用System.

利用Swoole开发功能实现高并发网络通信摘要:Swoole是一款基于PHP语言的高性能网络通信框架,具有协程、异步IO、多进程等特性,适用于开发高并发的网络应用程序。本文将介绍如何利用Swoole开发高并发网络通信功能,并给出一些代码示例。引言随着互联网的快速发展,对于网络通信的要求也越来越高,特别是在高并发的场景下。传统的PHP开发面临着并发处理能力较弱

世界三大通信巨头:1、华为,1987年成立,是全球领先的信息与通信技术(ICT)解决方案供应商,专注于ICT领域,坚持稳健经营、持续创新、开放合作;2、爱立信,成立于1876年,1877年就涉及通信领域,得益于美国的电话机进入瑞典市场,爱立信开始琢磨电话机制造技术;3、诺基亚,成立于1865年,1960年开始进军通信领域。

如何在GO语言中使用协程实现高效的网络通信引言:随着互联网的飞速发展,网络通信变得越来越重要。而在现代开发中,Go语言作为一门并发编程的语言,其强大的协程能力使得网络通信变得更加高效。本文旨在介绍如何在Go语言中使用协程实现高效的网络通信,包括常见的服务器和客户端编程。一、基础概念在讨论如何使用协程实现高效的网络通信之前,我们首先需要了解一些基础概念,包括以


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

SublimeText3漢化版
中文版,非常好用

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1
強大的PHP整合開發環境

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)