计算机网络相关概念

计算机网络:
多台计算机通过网络协议,实现网络资源共享和信息传递!

http://localhost:端口号 (80)www.baidu.com


username:admin
password:%AE%.... MD5算法   加密很难解密


网络通信三要素


1)IP地址
2)端口号
3)应该有一些规则(协议UDP/TCP)

举例:
我想和佟丽娅聊天...
1)找到她,才能和她说话------>IP地址
2)假设找她了,怎么说呢?
对着她耳朵说话------->port端口号
3)要对她:i love you 
假设不懂英文,----->定义规则(协议)

IP地址:
192.168.10.1 (通过8421码将可以由0,1组成的一些数据)
点分十进制法:十进制.十进制.十进制.十进制  书写简单

11000000.0000100....

Ip地址的分类:

IP地址的组成
IP地址 = 网络号码+主机地址


A类IP地址:第一段号码为网络号码,剩下的三段号码为本地计算机的号码
一般情况:国防部/大的国部门
B类IP地址:前二段号码为网络号码,剩下的二段号码为本地计算机的号码
一般情况:大学里面的多媒体教室
C类IP地址:前三段号码为网络号码,剩下的一段号码为本地计算机的号码
私人地址


A类 1.0.0.1---127.255.255.254 (1)10.X.X.X是私有地址(私有地址就是在互联网上不使用,而被用在局域网络中的地址) (2)127.X.X.X是保留地址,用做循环测试用的。
B类 128.0.0.1---191.255.255.254 172.16.0.0---172.31.255.255是私有地址。169.254.X.X是保留地址。
C类 192.0.0.1---223.255.255.254 192.168.X.X是私有地址
D类 224.0.0.1---239.255.255.254
E类 240.0.0.1---247.255.255.254


127.0.0.1--->表示本地计算机的回环地址
dos
ipconfig
ping ip地址 是否能通信

声呐系统(二战)  


端口号:0~65535有效端口号
0-1024属于保留端口

mysql:3306 



协议:
UDP协议 --->UDP编程
不需要建立连接通道的
数据大小有限制
不可靠连接
执行效率高
TCP协议 ---->TCP编程
需要建立连接通道
数据大小无限制
可靠连接
执行效率低


打电话:看成TCP协议  建立连接通道

发短信:UDP协议 不需要建立连接通道


Runtime
 每个 Java 应用程序都有一个 Runtime 类实例,使应用程序能够与其运行的环境相连接。
  public static Runtime getRuntime()返回与当前 Java 应用程序相关的运行时对象
public Process exec(String command)
             throws IOException在单独的进程中执行指定的字符串命令。 *

public class RunTimeDemo {

	public static void main(String[] args) throws IOException {
		
		//创建Runtime类的实例
		Runtime r = Runtime.getRuntime() ;
		
		//开启某一个进程
//		r.exec("calc") ;
//		r.exec("notepad") ;
		r.exec("mspaint") ;//开启画图功能
	}
}


InetAddress:类表示互联网协议 (IP) 地址


 如果一个类中没有构造方法,没有字段,只有成员方法?有什么特征
     1)应该有一些静态功能(Math类,Arrays,Collections...)
     2)可能符合一种单例模式(饿汉/懒汉)
    3)该类中的某些静态成员方法的返回值是该类本身

举例
  public class Demo{

public static Demo getDemo(){
new Demo() ;
}
}
常用方法:
public static InetAddress getByName(String host)
        throws UnknownHostException在给定主机名的情况下确定主机的 IP 地址。
        参数:

        主机名可以是机器名(如 "java.sun.com"),也可以是其 IP 地址的文本表示形式

public class InetAddRessDemo {

	public static void main(String[] args) throws UnknownHostException {
		
		//创建InetAddress对象,通过来获取ip地址
		//在知道主机名的情况下
		//InetAddress address = InetAddress.getByName("USER-20171205ZR") ;
		//IP 地址的文本表示形式
		//Ip地址对象
		InetAddress address = InetAddress.getByName("192.168.10.1") ;
		
		//上面获取到了Ip地址
		//public String getHostAddress()返回 IP 地址字符串(以文本表现形式)。 
		String ip = address.getHostAddress() ;
		System.out.println(ip);//192.168.10.1
//		public String getHostName()获取此 IP 地址的主机名。
		String name = address.getHostName() ;
		System.out.println(name);
	}
}//192.168.10.1

Udp编程
1)不需要建立连接通道
  2)数据大小有限制
3)不可靠连接---->传输速度快!
 
  发送端的开发步骤:
1)创建发送端的Socket对象
   2)创建数据,并打包
  3)调用当前发送端Socket对象中的发送的方法
4)关闭资源

public class SendDemo {
	
	public static void main(String[] args) throws IOException {
		///1)创建发送端的Socket对象
		//DatagramSocket:此类表示用来发送和接收数据报包的套接字。
		//创建DataGramSocket对象
		//构造方法
		//public DatagramSocket(int port,InetAddress laddr)
		//这个构造方法,里面传递并不是Ip地址的文本形式
		//构造数据报套接字并将其绑定到本地主机上任何可用的端口
		DatagramSocket ds = new DatagramSocket() ;
		
	  	//	2)创建数据,并打包
		//DatagramPacket 数据报包
		//DatagramPacket(byte[] buf, int offset, int length, InetAddress address, int port)
		/**
		 * buf - 包数据。
			offset - 包数据偏移量。
			length - 包数据长度。
			address - 目的地址。
			port - 目的端口号。
		 */
		//有数据
		byte[] bys = "hello,udp,我来了".getBytes() ;
		//获取包数据长度
		int len = bys.length ;
		//获取ip地址对象
		InetAddress address = InetAddress.getByName("192.168.10.1") ;
		//指定端口号
		int port = 10086 ;
		DatagramPacket dp =new DatagramPacket(bys, 0, len, address, port) ;
	  	//	3)调用当前发送端Socket对象中的发送的方法
		/*public void send(DatagramPacket p)
		          throws IOException从此套接字发送数据报包*/
		ds.send(dp);
	  	//	4)关闭资源*
		ds.close();
	}
}
Udp编程的接收端 开发步骤:
  1)创建Socket对象
2)创建一个数据报包(接收容器) 
  3)调用Socket对象中的接收的方法
  4)解析实际传递的数据
  5)将解析的数据(ip,数据)展示在控制台上
  6)关闭资源
注意:
接收端不要运行多次,会出现异常:

java.net.BindException: Address already in use: Cannot bind

public class ReceiveDemo {

	public static void main(String[] args) throws IOException {
		
		//1)创建Socket对象
//		public DatagramSocket(int port)创建数据报包套接字对象并且将其绑定到本地主机上的指定端口
		DatagramSocket ds = new DatagramSocket(10086);
		
		//2)创建一个数据报包(接收容器) 
		//public DatagramPacket(byte[] buf, int length)
		byte[] bys = new byte[1024] ;
		int len = bys.length ;
		DatagramPacket dp = new DatagramPacket(bys, len) ;
		
		//3)调用Socket对象中的接收的方法
//		public void receive(DatagramPacket p):接收数据报包
		ds.receive(dp);//阻塞式方法
		
		//获取ip地址文本形式
//		public InetAddress getAddress() :返回ip地址对象  数据报包类:DataGramPacket
		InetAddress address = dp.getAddress() ;
		String ip = address.getHostAddress() ;
		//4)解析实际传递的数据
		//public byte[] getData() :获取缓冲中实际数据(从接收容器中获取)
		byte[] bys2  = dp.getData() ;
		
		//public int getLength()返回将要发送或接收到的数据的长度。
		int len2 = dp.getLength() ;//从接收容器中获取包的实际长度
		
		String data = new String(bys2, 0, len2) ;
		
		System.out.println("当前接收到的数据是:"+data+",来自于"+ip);
		
		//6)关闭资源
		ds.close();
	}
}
要先运行接收端,再运行发送端。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值