黑马程序员-java网络编程

原文地址:黑马程序员-java网络编程 作者:猴子

------- android培训java培训、期待与您交流!----------

1、    网络模型

OSI的网络模型分为七层:应用层、表示层、会话层、传输层、网络层、数据链路层、物理层。

Linux的网络模型分为四层:应用层、传输层、网际层、网络接口层。

2、    两台计算机之间的通信

一台计算机想要通信首先要找到目标计算机,只要找到目标计算机才有可能实现通信,这就有IP的概念,通信的计算机之间是通过IP地址来查找相应的目标计算机的。IP地址分为两种:IPV4和IPV6。IPV4是由四个符数据组成的,IPV6是由六个字符数据组成。每个字符数据最大值为255。两台计算机通过网线和无线路由器连接后,遵守TCP/IP协议的前提下,通过IP地址来进行通信。每台计算机又有很多的应用程序,如果一台计算机发送数据到另外一台计算机上,是由哪个应用程序来接收数据呢?这个就需要有端口号进行区分。计算机一共分配了65536个端口,其中0~1024系统使用或保留端口。每一个应用程序都有一个自己的端口,通过这个端口来决定传输数据的是由哪个应用程序来接收。呢么,计算机想要通信,首先要符合一定的协议,让后是有一个IP地址,通过端口号来区分具体是由哪个应用程序来处理数据。计算机传输数据的时候,遵守了很多协议,常见的协议有:UDP和TCP。

UDP的特点:

1)         UDP是面向无连接的,双方要进行通信不需要建立连接。

2)         数据在传输过程中需要进行打包操作,每个包最大为64K。

3)         因无连接,协议不可靠。

4)         不需要建立连接,传输速度快,效率高。

TCP的特点:

1)         在传输数据前需要建立连接,并通过三次握手完成,TCP通信时面向连接的。

2)         数据在传输过程中不需要打包操作,可以传输大量的数据。

3)         因建立连接,协议可靠。

4)         必须建立连接,传输速度和效率稍低。

3、    Java网络编程类

和网络编程有关的基于API中的java.net包中,该包中包含了基本的网络编程实现,该包是网络编程的基础。

基础的网络类:InetAddress类。该类的功能是代表一个IP地址,并将IP地址和域名相关的操作方法包含在该类的内部。

代码如下:

import java.net.*;

public class InetAddressDemo {

public static void main(String[] args) {

try{

//使用域名创建对象

InetAddress inet1 = InetAddress.getByName("PC");

System.out.println(inet1);

//使用IP创建对象

InetAddress inet2 = InetAddress.getByName("127.0.0.1");

System.out.println(inet2);

//获得本机地址对象

InetAddress inet3 = InetAddress.getLocalHost();

System.out.println(inet3);

//获得对象中存储的域名

String host = inet3.getHostName();

System.out.println("域名:" + host);

//获得对象中存储的IP

String ip = inet3.getHostAddress();

System.out.println("IP:" + ip);

}catch(Exception e){}

}

}

运行结果:

PC/127.0.0.1

/127.0.0.1

PC/127.0.0.1

域名: PC

IP:127.0.0.1

 

UDP协议通信使用DatagramSocket与DatagramPacket类。

步骤:

1)         通过DatagramSocket对象为网络建立通道,叫做创建端口

发送端实现代码:DatagramSocket ds = new DatagramSocket();

如果是发送端,呢么这个端口可以不进行绑定,使用内核自由分配的端口号即可。如果是接收端的话,这个端口必须进行绑定到特殊的端口。接收端实现代码:DatagramSocket ds = new DatagramSocket(端口号);

2)         封装包

如果是发送端的话,首先要有数据,由于网络传输的是二进制数据,所以在定义网络包时也要定义成二进制的,实现代码:

发送端数据包:byte[] buf = “数据”.getBytes();

接收端数据包:byte[] buf = new byte[1024];

有了数据和数据缓存区后,可以把这个数据个数据缓存区封装成网络包:

发送端的数据包:DatagramPacket dp = new DatagramPacket(buf,buf.length,InetAddress.getAddress(“127.0.0.1”),10000);

接收端的数据包:DatagramPaket dp = new DatagramPaket(buf,buf.length);

3)         发送接收操作

根据Socket的方法,对数据包发送和接收操作,实现代码:

发送端:ds.send(dp);

接收端:ds.receive(dp);//接收到的数据包放到接收端定义的数据包缓存区中。

4)         关闭资源

ds.close();

 

TCP协议通信使用Socket和ServerSocket类。TCP和UDP的区别在于TCP是建立连接,UDP是不需要连接,TCP操作的是端口输入输出流对象,UDP操作的是DatagramPacket包。TCP通信时不需要建立包,直接获取输入输出流进行操作。

步骤:

1)         TCP通信首先是建立Socket端口。TCP建立端口时,客户端和服务端是使用不同的类。实现代码:

客户端:Socket s = new Socket();

服务端:ServerSocket s = new ServerSocket (端口);

2)         建立连接

通过服务端ServerSocket对象的accetp方法获取端口连接,在获取请求端口的信息后,建立连接。

3)         获取输入输出流

客户端获取Socket的getOutputStream()方法,通过该方法获取输出数据流。

服务端获取Socket的getInputStream()方法,获取读取数据流。

4)         关闭流

客户端:s.close();

服务端:s.close();ss.close();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值