关于网络通信的实例详解
一 概述
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(); } }
三 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);
3.接收数据的一般步骤:
DatagramSocket socket=new DatagramSocket(int port);//创建监听指定端口的数据报套接字DatagramPacket packet=new DatagramPacket(byte buf[], int length); socket.receive(packet);
以上是关于网络通信的实例详解的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

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

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

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

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

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

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

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

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

子网掩码的作用及其对网络通信效率的影响引言:随着互联网的普及,网络通信成为现代社会中不可或缺的一部分。与此同时,网络通信的效率也成为了人们关注的焦点之一。在构建和管理网络的过程中,子网掩码是一项重要而且基础的配置选项,它在网络通信中起着关键的作用。本文将介绍子网掩码的作用,以及它对网络通信效率的影响。一、子网掩码的定义及作用子网掩码(subnetmask)

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