网络编程的简单学习

网络编程

概述

​ 计算机网络通过 各种协议 将不同的电脑连接起来

​ 目的:

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

​ 达成的效果需要什么?

​ 1.如何准确地确定一个主机的位置

​ eg: IP地址:端口,定位到该计算机的某个资源

​ 2.如何传输数据?

​ 通过传输的介质

网络通信的要素

​ 需要知道通信双方的地址

​ IP地址

​ 端口号

​ 规则:网络通信的协议

​ TCP/IP参考模型

IP地址

class InetAddress
	//常用方法[了解即可]
	getByName(String str); //通过字符内的网址获取相关IP地址
    getLocalHost(String str); //获取设备名及其IP地址
    getCanonicalHostName() ;	//获取规范化的名字
    getAddress();	//对象地址
    getHostAddress();	//IP地址
    getHostName();	//域名||该设备的名字

​ 唯一定位一台网络上计算机

​ 本地IP地址:127.0.0.1

​ IP地址的分类

​ IPV4 eg:127.0.0.1 ( 4个字节组成)

​ IPV6 eg: xxxx:xxxx::xxxx:xxx… (128位,8个无符号数)

​ 公网-私网

​ 公网(互联网)、私网(局域网) eg:192.168.xx.xx

端口POST

​ 端口表示计算机上的一个程序的进程

​ - 不同的进程有不同的端口号 且不可冲突 ->用于区分软件

​ -被规定 0~65535

​ -还分为TCP、UDP端口(单个协议,端口不能重复。但不同协议,可相同)

​ 端口分类:

​ 公有端口 0~1023

​ HTTP:80

​ HTTPS:443

​ FTP:21

​ Telent:23

​ 程序注册端口:1024~49151,分配用户或程序

​ Tomcat:8080

​ MySQL:3306

​ Oracle:1521

​ 动态、私有端口:49152~65535

​ (尽量不要用这里的端口)

CMD中查看设备的端口

netstat -ano
netstat -ano|findstr "xxx" # 查看指定端口

java中的应用

class InetSocketAddress
    getAddress() //获取IP地址
    getHostName() //获取IP地址名
    getPort() //获取端口号 
        //模拟端口
        InetSocketAddress inetSocketAddress = new InetSocketAddress("127.0.0.1", 8080);
        System.out.println(inetSocketAddress); ///127.0.0.1:8080

        System.out.println(inetSocketAddress.getAddress()); ///127.0.0.1
        System.out.println(inetSocketAddress.getHostName()); //www.lrz.com
        System.out.println(inetSocketAddress.getPort()); //8080

通信协议

​ 为了解决 计算机交流的 一种约定

​ 网络通信协议:速率、码率、代码结构、传输控制…

​ TCP/IP协议族 【=>传输层】

​ TCP:用户传输协议

​ UDP:用户数据报协议

​ IP:网络互联协议

TCP&UDP 的对比

​ TCP:

​ 连接、稳定

​ 三次握手 四次挥手

客户端 --- 请求服务 ---> 服务端
	<--- 回应服务 -------
	---- 再次发送具体请求 -->
	
	--- 申请断开服务 -->
	<--- 通知明白请求 --
	<--- 询问是否确定 --
	---- 确定断开   -->

​ 分为客户端、服务端

​ 传输完成,释放连接,效率低

​ UDP:

​ 不连接、不稳定

​ 虽然也分为客户端和服务端、但没有明确的界限

​ 不管有无准备,都可发送

​ 容易导致DDOS攻击,即你可不接受数据,但它发送不断发送时,会堵塞通道

TCP实现聊天

​ 主要类

class socket

客户端

public class TcpDemo {
    public static void main(String[] args) throws Exception {

        //1.获取服务器的地址、端口号
        InetAddress inetAddress = InetAddress.getByName("127.0.0.1");
        int port=9802;

        //2.创建Socket连接
        Socket socket = new Socket(inetAddress,port);
        //3.发送消息
        OutputStream outputStream = socket.getOutputStream();
        outputStream.write("Hello".getBytes());

        //关闭资源
        socket.close();
        outputStream.close();
    }
}

服务端

public class TcpServer {
    public static void main(String[] args) throws IOException {

        //1.设置服务器的地址
        ServerSocket serverSocket = new ServerSocket(9802);
        //2.等待客户端连接
        Socket accept = serverSocket.accept();
        //3.读取客户端的消息
        InputStream inputStream = accept.getInputStream();

        //管道流
        ByteArrayOutputStream 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());


        //关闭资源
        serverSocket.close();
        inputStream.close();
        accept.close();
        byteArrayOutputStream.close();
    }
}

UDP

​ 不需要连接 但需要知道对方地址

​ 主要java类

class DatagramSocket
class DatagramPacket

服务器

package javaEE;

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

public class UdpServet {
    public static void main(String[] args) throws Exception {
        //开放端口
        DatagramSocket socket = new DatagramSocket(9820);
        
        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket packet = new DatagramPacket(bytes, 0, bytes.length);

        //堵塞接收
        socket.receive(packet);

        System.out.println(new String(packet.getData(),0,packet.getLength()));

        socket.close();

    }
}

客户端

package javaEE;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;

public class UdpClient {
    public static void main(String[] args) throws Exception {
        //1.建立一个Socket
        DatagramSocket socket = new DatagramSocket();

        //2.建立数据包
        String msg ="Hello";
        //发送对象
        InetAddress localhost = InetAddress.getByName("localhost");
        int port=9820;

        DatagramPacket datagramPacket = new DatagramPacket(msg.getBytes(), 0, msg.getBytes().length, localhost, port);




        //3.发送包
        socket.send(datagramPacket);

        socket.close();
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值