网络编程 详解

这篇具有很好参考价值的文章主要介绍了网络编程 详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

  1. 概述

计算机网络:将不同地理区域的计算机(广义)通过通信线路(光纤)连接起来,通过功能完备的软件实现数据共享,信息传递。

网络编程 :使程序借助网络在不同计算机间传输数据。

Java提供的网络类库,可以实现网络连接 ,且Java支持网络传输。

2.网络通信要素

2.1 IP

网络中的计算机通过IP地址来进行寻找主机。

局域网ip(192.168.110)

广域网ip

打开cmd,输入命令:ipconfig,回车即可查看。

2.2 端口号

与计算机上的程序相对应,每个运行中的程序会分配一个端口号,不可重复。

端口号范围是0-65535,其中 0-1024被系统占用,定义时1024-65535。

2.3 通信协议

通信双方有一些约定,如何安全可靠的传输数据,速率,传输代码,出错控制等。

传输层协议中有两个重要的协议:

● 传输控制协议TCP(Transmission Control Protocol)

安全、可靠;

使用前,”三次握手“,必须测试网络是否通畅;

进行通信的两个应用进程:客户端——>服务端;

传输完成,释放已建立的连接,效率低;

断开时,“四次挥手“。

三次握手详解:

(1)Cilent端发送连接请求

(2)Server端接受连接后回复Ack报文,并向此次连接分配资源

(3)Client端接收到Ack报文后向Server端发生Ack报文,这样就建立了TCP连接。

图解:

网络编程,网络协议,网络,Powered by 金山文档

举例详解:

网络编程,网络协议,网络,Powered by 金山文档

总结:三次握手是要确认对方收到了自己的数据。若只有两次,客户端无回应,这会浪费服务端的资源。三次握手的2个重要功能:双方做好发送数据的准备工作;允许双方协商初始序列号。

四次挥手详解:

(1)Client发送一个FIN,来关闭Client到Server的数据传送

(2)Server接收到FIN后,发送一个ACK给Client

(3)Server发送一个FIN,来关闭Server到Client的数据传送

(4)Client收到FIN后,发送ACK给Server,完成四次挥手

网络编程,网络协议,网络,Powered by 金山文档

举例详解:

网络编程,网络协议,网络,Powered by 金山文档

客户端


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

public class Client {
    public static void main(String[] args) throws IOException {
        Socket socket=new Socket("127.0.0.1",55555);
        OutputStream out=socket.getOutputStream();//获取输出流
        DataOutputStream d=new DataOutputStream(out);
        d.writeUTF("你好服务器");

        //获取输入流对象
        InputStream in =socket.getInputStream();
        DataInputStream din=new DataInputStream(in);
        System.out.println("来自服务端的消息:"+din.readUTF());
    }
}

服务端


import java.io.*;
import java.net.DatagramSocket;
import java.net.ServerSocket;
import java.net.Socket;

public class Server {
    public static void main(String[] args) throws IOException {
        //创建了一个服务器  端口为55555
        ServerSocket server=new ServerSocket(55555);
        System.out.println("服务器启动");
        Socket socket=server.accept();//监听客户端是否连接了服务器,是阻塞式的
        System.out.println("客户端连接成功"+socket);//socket就是连接到服务器的socket

        //获取输入流对象
        InputStream in=socket.getInputStream();
        DataInputStream d=new DataInputStream(in);
        System.out.println("来自客户端的信息:"+d.readUTF());

        //获取输出流对象
        OutputStream out=socket.getOutputStream();
        DataOutputStream dout=new DataOutputStream(out);
        dout.writeUTF("你好,找到客户端了!");

    }
}

运行结果:


//服务端
服务器启动
客户端连接成功Socket[addr=/127.0.0.1,port=55402,localport=55555]
来自客户端的信息:你好服务器

//客户端
来自服务端的消息:你好,找到客户端了!

● 用户数据报协议UDP(User Datagram Protocol)

将数据、源、目标封装在一个数据包中;因无需连接,故不安全,发送成功与否都不知道;发送数据结束时不用释放资源,速度快。文章来源地址https://www.toymoban.com/news/detail-728075.html


import java.io.IOException;
import java.net.*;

public class Send {
    public static void main(String[] args) throws IOException {
        //负责发送和接收信息
        DatagramSocket datagramSocket=new DatagramSocket();
        while(true){
            String s="你好,接收端";
            DatagramPacket datagramPacket=new DatagramPacket(s.getBytes(),s.getBytes().length, InetAddress.getByName("127.0.0.1"),55555);
            datagramSocket.send(datagramPacket);
        }
    }
}

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.SocketException;

public class Receieve {
    public static void main(String[] args) throws IOException {
        DatagramSocket datagramSocket=new DatagramSocket(55555);
        byte[] b=new byte[1024];
            DatagramPacket datagramPacket=new DatagramPacket(b,b.length);
            datagramSocket.receive(datagramPacket);
            String s=new String(datagramPacket.getData(),0,datagramPacket.getLength());
            System.out.println(s);//你好,接收端
            datagramSocket.close();
    }

}

到了这里,关于网络编程 详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【网络编程】网络层——IP协议

    TCP作为传输层控制协议,其保证的是数据传输的可靠性和传输效率,但TCP提供的仅仅是数据传输的策略,而真正负责数据在网络中传输的其实是传输层以下的网络层和数据链路层。 双方在进行网络通信时,发送的数据并不是直接从一方的传输层直接发送到了另一方的传输层,

    2024年02月05日
    浏览(41)
  • 【网络编程】传输层协议——TCP协议

    TCP报头当中各个字段的含义如下 源/目的端口号 :表示数据是从哪个进程来,到发送到对端主机上的哪个进程。 32位序号/32位确认序号 :分别代表TCP报文当中每个字节数据的编号以及对对方的确认,是TCP保证可靠性的重要字段。 4位TCP报头长度 :表示该TCP报头的长度,以4字

    2024年02月17日
    浏览(57)
  • 「网络编程」网络层协议_ IP协议学习_及深入理解

    「前言」文章内容是网络层的IP协议讲解。 「归属专栏」网络编程 「主页链接」个人主页 「笔者」枫叶先生(fy) IP指网际互连协议, Internet Protocol 的缩写,是TCP/IP体系中的网络层协议。 IP协议位于网络层 网络层解决的问题 传输层 : 负责两台主机之间的数据传输。代表协议:

    2024年02月08日
    浏览(47)
  • [C++ 网络协议编程] UDP协议

    目录 1. UDP和TCP的区别 2. UDP的工作原理 3. UDP存在数据边界 4. UDP的I/O函数 4.1 sendto函数 4.2 recvfrom函数 4. 已连接(connected)UDP套接字和未连接(unconnected)UDP套接字 5. UDP的通信流程 5.1 服务器端通信流程 5.2 客户端通信流程 主要区别: TCP和UDP的主要区别是,TCP具有流控制机制,而UDP没

    2024年02月12日
    浏览(41)
  • [C++ 网络协议编程] 域名及网络地址

    DNS(Domain Name System):是对IP地址和域名(如:www.baidu.com等)进行相互转换的系统,其核心是DNS服务器。 我们输入的www.baidu.com是域名,是一种虚拟地址,而非实际地址,DNS服务器会将这个虚拟地址转换为实际地址,即IP地址。若我们直接输入IP地址,则不会发生上面的转换。

    2024年02月12日
    浏览(40)
  • 网络编程(TFTP协议实验)

    2024年02月13日
    浏览(44)
  • 【Linux网络编程】HTTPS协议

    喜欢的点赞,收藏,关注一下把! HTTPS 是什么 HTTPS 也是一个应用层协议,是在 HTTP 协议的基础上引入了⼀个加密层。 HTTP 协议内容不管是GET还是POST都是按照文本的方式 明文传输 的,这就信息导致在传输过程中出现泄漏和被篡改的情况。所以在http和传输层直接添加一层软件

    2024年04月15日
    浏览(53)
  • 【Linux网络编程】HTTP协议

    喜欢的点赞,收藏,关注一下把! 目前基本socket写完,一般服务器设计原则和方式(多进程、多线程、线程池)+常见的各种场景,自定义协议+序列化和反序列化都已经学过了。 那有没有人已经针对常见场景,早就已经写好了常见的协议软件,供我们使用呢? 当然了,最典型的

    2024年04月16日
    浏览(56)
  • 【网络编程】网络通信基础——简述TCP/IP协议

    个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得,欢迎大家在评论区交流讨论💌 ip地址简单来说就是用来描述网络上一个设备的所在位置。 端

    2024年02月04日
    浏览(56)
  • 【Java】--网络编程:基于TCP协议的网络通信

    TCP协议(Transmission Control Protocol),即传输控制协议,是一种 面向连接 的, 可靠 的,基于 字节流 的传输层通信协议。数据大小无限制。 建立连接的过程需要 三次握手 。 断开连接的过程需要 四次挥手 。 使用TCP协议的通信双方分别为 客户端 和 服务器端 。 客户端负责向服务

    2024年01月23日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包