Java----网络编程

目录

目录

目录

网络编程概述

网络编程中有两个主要的问题:

一、网络通信两个要素:

1. 如何实现网络中的主机互相通信?

2. InetAdress

3. 端口号

4. 通信协议:

三、网络编程

1. TCP编程

2. UDP编程

3. URL编程


网络编程概述

网络编程中有两个主要的问题:

1. 如何准确的定位网络上的一台或多台主机,定位主机上的特定的应用
2. 找到主机后如何可靠高效地进行数据传输

一、网络通信两个要素:

1. 如何实现网络中的主机互相通信?

  • ip 和 端口号
  • 提供网络通信协议。 TCP/IP参考模型(应用层,传输层,网络层,物理+数据链路层),

2. InetAdress

  • 唯一的标识 internet 上的计算机 ( 通信实体 )
  • 本地回环地址(hostAddress):127.0.0.1   主机名 ( hostName ):localhost
  • IP地址分类方式一 : IPV4     IPV6
    • IPV4:4个字节组成,4个0~255。大概42亿个, 30亿都在北美,亚洲4亿。2011年初已经用尽。以点分十进制表示,如192.168.0.1
    • IPV6:128位(16个字节),写成8个无符号整数,每个整数用四个十六进制位表示,数之间用冒号 隔开,如:2001:0db8:3c4d:0015:0000:0000:1a2f:1a2b
  • IP地址分类方式2:公网地址(万维网使用) 和 私有地址(局域网使用)。
  • 192.168.开头的就是私有地址,范围即为 192.168.0.0 ~ 192.168.255.255,专门为组织机构内部使用
//获得IP地址
InetAddress inetAddresses2 = InetAddress.getByName("192.168.8.123");
//getHostName
System.out.println(inetAddresses2.getHostName());
//getHostAddress
System.out.println(inetAddresses2.getHostAddress());
//Canonical : 规范的
System.out.println(inetAddresses2.getCanonicalHostName());

域名解析: 现在本机的hosts文件,判断是否有输入的域名地址,没有的话,再通过DNS服务器,找主机。

3. 端口号

  • 端口号标识正在计算机上运行的进程(程序)
  • 不同的进程有不同的端口号,用来区分软件
  • 被规定为一个16位的整数 0~65535
  • TCP 和 UDP 各有 65535个端口,单个协议下端口不能冲突
  • 端口分类:

公认端口: 0~1023。被预先定义的服务通信占用端口。
HTTP 默认端口 : 80
HTTPS 默认端口:443
FTP 默认端口: 21
Telnet 默认端口:23
注册端口:1024~49151、分配给用户进程或应用程序。
tomcat 默认端口:8080
Mysql 默认端口:3306
Oracle 默认端口:1521
动态、私有端口:49152~65535

4. 通信协议:

TCP/IP协议簇

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

用户传输协议 TCP (Transmission Control Protocol)
用户数据报协议UDP(User Datagram Protocol)

  • Tcp/IP 以其两个主要协议:

传输控制协议:TCP,和网络互联协议:IP,而得名,实际上是一组协议,包括多个具有不同功能且互为关联的协议。

IP(Internet Protocol)协议是网络层的主要协议,支持网间互联的数据通信。
TCP/IP协议模型从更实用的角度出发,形成了高效的四层体系结构,即物理链路层,IP层,传输层和应用层

TCP协议:类似于打电话

UDP协议:类似于发短信

DDOS洪水攻击

三、网络编程

1. TCP编程

客户端:Socket

//客户端
package com.kuang.lesson2;
import java.io.IOException;
import java.io.OutputStream;
import java.net.InetAddress;
import java.net.Socket;
import java.net.UnknownHostException;
//客户端
public class TcpClientDemo01 {
    public static void main(String[] args) {
        Socket socket = null;
        OutputStream os = null;
        try {
            //1. 连接服务器的地址
            InetAddress serverIP = InetAddress.getByName("127.0.0.1");
            int port = 8899;
            //2. 创建一个Socket
            socket = new Socket(serverIP,port);
            //3. 创建一个输出流,向外写东西
            os =  socket.getOutputStream();
            os.write("你好,欢迎学习狂神说Java".getBytes());
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            //4. 关闭资源
            try {
                if (os!=null){
                    os.close();
                }
                if (socket!=null){
                    socket.close();
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

服务端:Servsocket

//1. 开放服务器端口,创建ServerSocket
serverSocket = new ServerSocket(8899);
//2. 等待客户端的连接
accept = serverSocket.accept();
//3. 读入客户端的消息,
is = accept.getInputStream();

2. UDP编程

发送端

//1. 建立DatagramSocket
DatagramSocket socket = new DatagramSocket();
//2. 封装数据包
 String msg = "UDPSender==>";
byte[] data = msg.getBytes();
InetAddress inet = InetAddress.getByName("127.0.0.1");
int port = 9090;
DatagramPacket packet = new DatagramPacket(data,0,data.length,inet,port);
//3. 通过 Socket 发送 packet
socket.send(packet);
//4. 关闭socket
socket.close();

接收端

 //1. 建立DatagramSocket,开放端口
DatagramSocket socket = new DatagramSocket(9090);
 //2. 接收数据
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer,0,buffer.length);
socket.receive(packet);
//3. 输出数据
// packet.getData() : 获取packet中的数据
System.out.println(new String(packet.getData(), 0, packet.getLength()));
//4. 关闭socket
socket.close();

3. URL编程

URL 的 基本结构由 5部分组成:

传输协议://主机名:端口号/文件名 #片段名?参数列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值