网络编程、UDP、TCP

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

计算机网络

就是将地理位置不同的具有独立功能的多台计算及外部设备,通过通信线路连接起来,在网络操作系统、网络管理软件以及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统

目的

传播交流信息、数据交换、通信

如何做到

1.如何准确定位网络上的一台主机 192.xxx.xx.xx:端口,定位到这个计算机上的某个资源
2.找到主机,如何传输数据
javaweb:网页编程 b/s
网络编程:tcp/ip c/s

网络通信的要素

如何实现网络的通信

1.ip、端口号
2.协议 tcp/ip协议
3.万物皆对象
网络编程、UDP、TCP,网络,udp,tcp/ip

IP

ip地址:InetAdress
唯一定位一台网络上的计算机
127.0.0.1:本机Locallost

IP地址分类

ipv4/ipv6
ipv4 127.0.0.1 4个字节 0~255 42亿 30亿在北美,4亿在亚洲,2011年用尽
ipv6:128 8个无符号整数
公网(互联网)/私网(局域网)
ABCD类地址
192.168.xx.xx 专门给组织内部使用的
域名:记忆ip问题

package com.xgglr;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.Arrays;

public class IPDemo {
    public static void main(String[] args) {
        try {
            InetAddress[] inetAddresses = InetAddress.getAllByName("127.0.0.1");
            System.out.println(Arrays.toString(inetAddresses));
            InetAddress[] localHosts = InetAddress.getAllByName("localhost");
            System.out.println(Arrays.toString(localHosts));
            InetAddress localHost = InetAddress.getLocalHost();
            System.out.println(localHost);
            InetAddress[] baiduName = InetAddress.getAllByName("www.baidu.com");
            System.out.println(Arrays.toString(baiduName));

            for (InetAddress address : baiduName) {
                String canonicalHostName = address.getCanonicalHostName();//规范名称
                String hostName = address.getHostName();//域名
                String hostAddress = address.getHostAddress();//IP
                System.out.println(canonicalHostName);
                System.out.println(hostName);
                System.out.println(hostAddress);
                System.out.println("============");
            }
        } catch (UnknownHostException e) {
            e.printStackTrace();
        }
    }
}

端口

表示计算机上的一个程序的进程,不同的进程端口号不同,区分如软件
被规定0~65535
tcp/udp 6553582 tcp:80 udp:80 单个协议下,端口号不能冲突
端口分类:共有端口0-1023
http:80 https:443 ftp:21 Telent:23
程序注册端口:1024-49151,分配用户或者程序
tomcat:8080 mysql:3306 oracle:1521
动态、私有:49152-65535
netstat -ano 查看所有端口
netstat -ano|findstr “5900” 查看指定端口
tasklist|findstr “8696” 查看指定端口的进程

通信协议

网络通信协议:速率,传输码率,代码结构,传输控制
分层思想
tcp/ip协议:一组协议
tcp:用户传输协议,udp:用户数据报协议
出名的协议:tcp,ip:网络互联协议

tcp和udp对比

tcp:打电话
连接 稳定
三次握手 四次挥手
客户端 服务端
传输完程 释放连接 效率低
udp:发短信
不连接 不稳定
客户端、服务端 没有明确的界限
不能有没有准备好 都可以发送

TCP

客户端:连接服务器Socket,发送消息

package com.xgglr.tcpDemo;

import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;

//客户端
public class tcpClintDemo {
    public static void main(String[] args) {
        try {
            InetAddress byName = InetAddress.getByName("localhost");
            int port = 8888;
            Socket socket = new Socket(byName,port);
            OutputStream outputStream = socket.getOutputStream();
            outputStream.write("您好!!!,这里时客户端".getBytes());
            outputStream.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

服务端:建立服务的接口ServerSocket,等待用户的连接accept,接受用户的消息

package com.xgglr.tcpDemo;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Arrays;

//服务端
public class tcpServerDemo {
    public static void main(String[] args) {
        ServerSocket serverSocket = null;
        Socket socket = null;
        InputStream inputStream = null;
        ByteArrayOutputStream byteArrayOutputStream = null;
        try {
            serverSocket = new ServerSocket(8888);
            while (true){
                socket = serverSocket.accept();
                inputStream = socket.getInputStream();
                //管道流
                byteArrayOutputStream = new ByteArrayOutputStream();
                byte[] bytes = new byte[1024];
                int len;
                while ((len = inputStream.read(bytes)) != -1){
                    byteArrayOutputStream.write(bytes,0,len);
                }
                System.out.println(byteArrayOutputStream.toString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if (byteArrayOutputStream != null){
                try {
                    byteArrayOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (inputStream != null){
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (socket != null){
                try {
                    socket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (serverSocket != null){
                try {
                    serverSocket.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}

文件上传

package com.xgglr.tcpDemo;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
//服务端
public class TcpFileDownLoaderServerDemo {
    public static void main(String[] args) {
        try {
            while (true){
                ServerSocket socket = new ServerSocket(9999);
                Socket accept = socket.accept();
                InputStream is = accept.getInputStream();

                FileOutputStream fos = new FileOutputStream(
                        new File("D:\\software\\JavaCode\\javaSE\\JavaSE01\\src\\com\\xgglr\\tcpDemo\\tcp.jpg"));
                byte[] buffer = new byte[1024];
                int len;
                while ((len = is.read(buffer)) != -1){
                    fos.write(buffer,0,len);
                }
                //确认接收到了,可以断开
                accept.getOutputStream().write("已经接收,可以关闭!!!".getBytes());

                fos.close();
                is.close();
                accept.close();
                socket.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package com.xgglr.tcpDemo;

import java.io.*;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TcpFileDownLoaderClintDemo {
    public static void main(String[] args) {
        try {
            //创建连接
            InetAddress byName = InetAddress.getByName("localhost");
            int port = 9999;
            Socket socket = new Socket(byName,port);
            //创建输出流
            OutputStream os = socket.getOutputStream();
            //读取文件
            FileInputStream fileInputStream = new FileInputStream(new File("2.jpg"));

            //写出文件
            byte[] buffer = new byte[1024];
            int len;
            while ((len = fileInputStream.read(buffer)) != -1){
                os.write(buffer,0,len);
            }

            //通知服务器发送完毕
            socket.shutdownOutput();
            //确认是否接收
            InputStream is = socket.getInputStream();
            //管道流
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] bytes = new byte[1024];
            int lens;
            while ((lens = is.read(bytes)) != -1){
                baos.write(bytes,0,lens);
            }
            System.out.println(baos.toString());

            fileInputStream.close();
            os.close();
            socket.close();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

UDP

不用连接,需要知道地址文章来源地址https://www.toymoban.com/news/detail-837993.html

package com.xgglr.udp;

import java.io.IOException;
import java.net.*;
//UDP客户端
public class UdpClint {
    public static void main(String[] args) {
        //建立连接Socket
        try {
            DatagramSocket socket = new DatagramSocket();
            //建包
            String msg = "你好!!! Server";

            InetAddress localhost = InetAddress.getByName("localhost");
            int port = 9090;
            /**
             * byte buf[], 数据
             * int offset, 数据的起始长度
             * int length, 结束长度
             * netAddress address, 接受ip
             * int port 端口号
             * */
            DatagramPacket packet = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);

            //发送包
            socket.send(packet);

            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

package com.xgglr.udp;

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

//UDP服务端
public class UdpServer {
    public static void main(String[] args) {
        //开放端口
        try {
            DatagramSocket socket = new DatagramSocket(9090);
            //接受数据
            byte[] buffer = new byte[1024];
            DatagramPacket packet = new DatagramPacket(buffer, 0, buffer.length);
            socket.receive(packet);// 阻塞接收
            System.out.println(packet.getAddress().getHostName());
            System.out.println(packet.getPort());
            System.out.println(packet.getLength());
           // System.out.println(Arrays.toString(packet.getData()));

            socket.close();
        } catch (SocketException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

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

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

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

相关文章

  • 基于TCP、UDP网络编程

    应用层 : 应用程序拿到数据怎么用 传输层 : 负责关注传输过程中起点和终点 网络层 :负责整个传输过程中的路线规划 数据链路层 :负责相邻节点之间的数据传输 物理层 : 基础设施,硬件设备 程序员写网络程序,主要编写的应用层代码,真正要发这个数据,调用下层协

    2024年02月07日
    浏览(47)
  • TCP和UDP网络编程

    TCP和UDP协议是TCP/IP协议的核心。 TCP 传输协议:TCP 协议是一TCP (Transmission Control Protocol)和UDP(User Datagram Protocol)协议属于传输层协议。其中TCP提供IP环境下的数据可靠传输,它提供的服务包括数据流传送、可靠性、有效流控、全双工操作和多路复用。通过面向连接、端到端和可靠

    2023年04月08日
    浏览(43)
  • UDP和TCP网络编程

    特点: 无连接:发送数据前不需要建立连接。 不可靠:没有重发机制,无法保证数据的可靠性和顺序。 无拥塞控制:发送方发送数据的速度受限于网络的带宽。 快速:由于没有连接建立和拥塞控制的处理,UDP的传输速度通常比TCP快。 简单:UDP协议的头部较小,仅有8个字节

    2024年02月11日
    浏览(42)
  • 【C++】6.网络编程:网络编程(TCP&UDP)

    网络编程是C++ API操作中很重要的一部分,包含 TCP 和 UDP 。 网络传输模型可以抽象为7个层: 物理层、数据链路层、网络层、传输层、会话层、表示层、应用层 。 但在使用TCP/IP协议时,可以简化为这4层: 网络接口、网络层、传输层、应用层 。 TCP:可靠传输,三次握手建立

    2024年02月16日
    浏览(38)
  • 【网络编程】TCP,UDP协议详解

    小亭子正在努力的学习编程,接下来将开启javaEE的学习~~ 分享的文章都是学习的笔记和感悟,如有不妥之处希望大佬们批评指正~~ 同时如果本文对你有帮助的话,烦请点赞关注支持一波, 感激不尽~~   目录 前言 TCP协议 TCP协议特点 TCP协议通信场景 TCP协议的几个重要机制 一、

    2023年04月19日
    浏览(50)
  • 网络编程(TCP与UDP协议)

    Java是 Internet 上的语言,它从语言级上提供了对网络应用程序的支持,程序员能够很容易开发常见的网络应用程序。 Java提供的网络类库,可以实现无痛的网络连接,联网的底层细节被隐藏在 Java 的本机安装系统里,由 JVM 进行控制。并且 Java 实现了一个跨平台的网络库, 程序

    2023年04月27日
    浏览(49)
  • Java网络编程(UDP、TCP)

    在网络通信协议下,不同计算机上运行的程序,进行的数据传输。 应用场景:即时通信、网游对战、金融证券、国际贸易、邮件、等等。 不管是什么场景,都是计算机跟计算机之间通过网络进行数据传输。 Java中可以使用java.net包下的技术轻松开发出常见的网络应用程序。

    2024年02月05日
    浏览(61)
  • 网络编程详解-UDP-TCP

    网络编程 在网络通信协议下,不同计算机上运行的程序,可以进行数据传输 网络编程的三要素是 IP地址、端口和协议 。具体分析如下: IP地址 :IP地址是网络中每一台计算机的唯一标识,它类似于现实生活中的家庭住址,用于在网络中找到具体的设备。IP地址是由数字组成

    2024年03月15日
    浏览(76)
  • 【Java学习笔记】 68 - 网络——TCP编程、UDP编程

    https://github.com/yinhai1114/Java_Learning_Code/tree/main/IDEA_Chapter21/src 目录 项目代码 网络 一、网络相关概念 1.网络通讯 2.网络 3.IP地址 4.域名 5.端口号 6.网络通讯协议 TCP协议:传输控制协议 UDP协议: 二、InetAddress类 1.相关方法 三、Socket 1.基本介绍 2.TCP网络通信编程 基本介绍 应用案例

    2024年02月04日
    浏览(50)
  • 网络编程 tcp udp http编程流程 网络基础知识

    OSI分层:应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip: 应用层 传输层 网络层 数据链路 ip地址:唯一标识一台主机 ipv4 32位 ipv6 128位 寻址 可以反映物理上的一个变化 MAC地址:48 固化在计算机中 ip地址又两部分构成:网络号+主机号 端口号:标识一个应用程序

    2024年02月13日
    浏览(71)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包