IP协议

IP协议:

Internet是由无数台计算机互相连接而成的。而我们要确认网络上的每一台计算机,靠的就是能唯一标识该计算机的网络地址,

这个地址就叫做IP(Internet Protocol的简写)地址,即用Internet协议语言表示的地址。IP的存储是使用二进制存储。

端口:同一台计算机进程的标识。

端口范围:

0~65535是我们可以使用的端口范围。

0~1024 一般是系统进程端口,不建议使用。

1024~65535 是我们可以使用使用的端口。

注:尽量不要和系统进程或者和已经打开的程序端口重复,否则会出现端口被占用的问题。

协议就是不同计算机通信的规则。

HTTP: 超文本传输协议。同时HTTP 是无处状态,无连接的,非常灵活快速简单的协议。

HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。HTTP允

许传输任意类型的数据对象。无状态是指协议对于事务处理没有记忆能力,缺少状态意味着如果后续处理需要前面

的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。无连接的含义是限制每次连接只处理一个请求

,服务器处理完客户的请求,并收到客户的应答后马上断开连接。采用这种方式可以节省传输时间。

FTP:文件传输协议。

FTP的目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。

FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以用

FTP客户端通过FTP协议访问位于FTP服务器上的资源。

TCP:传输控制协议。

TCP主要面向连接的协议,一般都是用来文件上传、文件下载。数据传输量没有限制,并且数据安全可靠。

缺点:就是速度比较慢。

UDP:用户数据报协议。

UDP主要面向无连接,一般是用来发短信、群聊等。UDP的数据传输量有限制,最好不要超过64K,但是UDP传输数据速度快。

缺点:数据不安全,很容易丢失。传输数据之前必须打包处理

IP分为网络区段号和主机段号:

IP地址分类

A类地址: 第一段为网络区段号,后面三段为主机段号 256 * 256 * 256 = 16777216 国家 政府 军方

B类地址: 前两段为网络区段号,后面两段为主机段号 256 * 256 = 65536 学校 公司

C类地址: 前三段为网络区段号,后面一段为主机段号 256 家用 网吧

特殊地址:

127.0.0.1 : 本机地址/回环地址 == localhost == 192.168.1.112

192.168.x.x : 表示私有地址 (这个地址不能够在互联网上使用,只能够在局域网中使用)

x.x.x.25: 表示广播地址

掌握2个命令:

ipconfig: 查看本机网络配置

ping ip地址: 测试是否能够和目标ip进行正常的发送和接收数据包

下面是Java类 InetAddress方法示例:

 

public class IpDemo {
  public static void main(String[] args) throws UnknownHostException {
  byte[] bys = {(byte) 192,(byte) 168,1,118};
  InetAddress ip = InetAddress.getByAddress(bys);
  System.out.println(ip);
  System.out.println(InetAddress.getByName("192.168.1.118"));
  System.out.println(InetAddress.getByName("www.xxx.com"));
  System.out.println(InetAddress.getLocalHost());
  System.out.println(InetAddress.getLoopbackAddress());

  InetAddress address = InetAddress.getByName("本地主机");
  System.out.println(address.getHostAddress());
  System.out.println(address.getHostName());
  System.out.println(address.isLoopbackAddress());
  System.out.println(ip.getHostName());
  System.out.println(ip.getHostAddress());
  }

}

 

下面是一个模拟客户端发送数据到服务器端的示例代码:

package com.sxx.cn;

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

public class KeHuDuan {
//客户端示例
  public static void main(String[] args) throws IOException {
  //创建IP对象
  InetAddress ia = InetAddress.getByName("192.168.1.118");
  int clientPort = 10001;
  //使用 DatagramSocket方法 创建Socket对象 
  DatagramSocket ds = new DatagramSocket(clientPort,ia);
  //创建你发送的数据
  String data = "啊!西湖的水我的泪!啊啊~";
  //打包数据
  byte[] b = data.getBytes();
  int length = b.length;
  //发送地址
  InetAddress sIp = InetAddress.getByName("192.168.1.118");
  int s = 1818;
  DatagramPacket dp = new DatagramPacket(b, length, sIp, s);
  //调研socket 的方法发送数据包
  ds.send(dp);
  //因为是IO流所以需要释放资源
  ds.close();
  }

}

 

服务器端示例:

package com.sxx.cn;

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

public class DomeServer {

  public static void main(String[] args) throws Exception {
  //使用 DatagramSocket方法创建Socket接收对象
  DatagramSocket ds = new DatagramSocket(1818, InetAddress.getByName("192.168.1.118"));
  //创建一个空数组来进行拆箱
  byte[] buf = new byte[150];
  DatagramPacket dp = new DatagramPacket(buf,buf.length);
  ds.receive(dp);
  //进行解析
  byte[] data = dp.getData();
  String clientIp = dp.getAddress().getHostAddress();
  int clientport = dp.getPort();
  int length = dp.getLength();
  String result = new String(data, 0, length);
  System.out.println("来自:" + clientIp + "端口号:" + clientport + "的数据:" + result);
  //释放资源
  ds.close();
  }

}

 

posted @ 2019-05-13 21:59  一杯香米酒  阅读(266)  评论(0编辑  收藏  举报