您的位置:首页 > 理论基础 > 计算机网络

java网络编程之一

2016-07-14 09:30 561 查看
java网络编程:----------

一、概念:---

1、网络中含盖的内容很多,所以网络中就将网络分层来考虑。

2、网络的模型----

OSI:----将网络分成了7层。

1)物理层:----(网线等或无线设备):---传输比特流。

2)数据链路层:----mac地址的封装和解封装。---传输的数据叫做帧,----设备:交换机。

3)网络层:-----IP地址的封装,数据要发向那一台主机-----设备:路由器。数据包的路由,分发到目的地。

4)传输层:-----传输的协议和端口号,----按照怎样的规则将数据传输出去。

5)会话层:-----通过传输层建立一个会话

6)表示层:-----将会话的数据的解析(图片,声音等)

7)应用层:-----计算机的应用软件。
网络传输---是每一层对数据进行封装---

tcp/ip网络模型的参考模型-----

因为基于7层协议的复杂型-----就后面为了方便的起见---产生了tcp/ip网络模型

1)应用层(应用层、表示层、会话层)。

2)传输层(传输层)。

3)网络层(网际层)。

4)主机至网络层(数据链路层、物理层)。

二、实现网络通讯-----

网络通讯的要素:

1)ip地址----计算机的标识

2)端口号

3)传输协议----通讯的规则

UDP----数据报文协议:(如:QQ和FeiQ就使用该协议)。

特点:将ip地址,元数据和端口都封装到数据包中,所以不需要建立连接,不管目的地地址是否存在--所以它不需要

建立连接,所以数据传输快,但数传输不可靠的(如果目的地地址不存在,数据就丢了)。传输每个数据最大是64k。

TCP----传输控制协议----(如:打电话,下载数据)。

特点:必须先建立连接,才进行通信------

(如何判断建立连接------三次握手建立连接-----1)在吗?-----2)在?-----3)我知道了?)

三次握手建立连接,所以传输是可靠的,安全的,但是速度慢。

UDP和TCP都是传输方式:UDP---是通过将大数据分成一个一个小包,进行传输,而TCP是通过流的方式进行传输。

127.0.0.1是用来测试网卡的。本地回环地址 本地默认---只为访问本地用。

三、Socket套接字

数据就在Socket之间进行传输-----Socket就是通讯的两端。

数据在Socket的IO流中进行传输。

UDP的套接字----DatagramSocket。

DatagramSocket:----此类表示发送数据包的套接字(发送或接收端都使用该类)。
数据包(包含包的地址、包的端口号、包的元数据):----包的对象-----发送包、接收包

代码一、获取ip的信息

public class InteAdressDemo {
//ip地址---因为复杂(有自己的主机名和ip地址),所以在java中将其封装成一个对象(InteAdress及其子类)。
/*
* 该对象没有构造方法,通过静态函数(方法),所以必须有一个返回该对象的方法来获取该对象。
*/
public static void main(String[] args) throws Exception {
//获取本地的ip对象
InetAddress ip=InetAddress.getLocalHost();
System.out.println("address----"+ip.getHostAddress());//获取本地主机ip地址
System.out.println("host-----"+ip.getHostName());//获取本地主机名
//获取其他的主机的ip地址的对象
//ip=InetAddress.getByName("192.168.1.100");//根据指定的ip地址来获取主机名。
ip=InetAddress.getByName("www.baidu.com");//通过主机名获取其对应的主机名和ip地址。
System.out.println("address----"+ip.getHostAddress());//获取本地主机ip地址
System.out.println("host-----"+ip.getHostName());//获取本地主机名

//ip.getAllByName(),这个方法是因为有些主机肯能对应着多个ip地址。
}

}

代码二、udp传输

1、接收端

public class UDPreceived {
public static void main(String[] args) throws Exception {
System.out.println("接收端启动......");
/*
* 建立udp的接收端的基本的思路-----
* 1、建立socket的socket服务
* 2、创建数据包,用于存储接收到的数据,方便用数据包对象的方法解析这些数据
* 3、使用socket服务的receive方法将接到的数据存储到数据包中。
* 4、通过数据包中的方法解析数据包中的数据。
* 5、关闭资源。
*/
//1、建立socket的socket服务
DatagramSocket ds=new DatagramSocket(10001);//接收端要指定一个端口。
//创建数据包
byte[] buf=new byte[1024];
DatagramPacket dp=new DatagramPacket(buf, buf.length);

//3、使用socket服务的方法将接收到的数据存储到数据包中
ds.receive(dp);
//4、通过数据包对象的方法,解析其中的数据,比如:端口、地址、数据内容。
String ip=dp.getAddress().getHostAddress();
int port=dp.getPort();
String text=new String(dp.getData(),0,dp.getLength());
System.out.println("ip==="+ip+"---port==="+port+"---text==="+text);
//5、关闭资源。
ds.close();

}

}

2、发送端

/*

 * 使用UDP进行网络的通讯。

 * 

 */

public class UDPsend {
public static void main(String[] args) throws Exception {
/*
* 创建UDP传输的发送端思路---- 1、建立udp的socket的服务 2、将要发送的数据封装到数据包中
* 3、通过udp的socket的服务将数据包发送出去 4、关闭socket服务。
*/
System.out.println("发送端启动......");
// 1、建立udp的socket的服务
DatagramSocket ds = new DatagramSocket();
// 2、将要发送的数据封装到数据包中
String str = "ewoodsads";
byte[] buf = str.getBytes();
DatagramPacket dp = new DatagramPacket(buf, buf.length, InetAddress.getByName("169.254.30.56"), 10001);
// 3、通过udp的socket的服务将数据包发送出去
ds.send(dp);
// 4、关闭socket服务。
ds.close();
}

}

代码三、tcp传输

1、客户端

public class ClientDemo {
public static void main(String[] args) throws UnknownHostException, IOException {

      /*

       * 创建tcp的客户端----

       * 1、创建tcp客户端socket服务,使用的是Socket对象

       *  建议该对象创建的时候就明确指定的目的地(ip地址、端口号),明确一个要连接的主机。

       * 2、网络传输,是什么数据都会有的,所以就是字节流。

       *   如果建立连接成功,说明数据传输通道已经建立,该通道就是一个Socket流,是底层帮我们建立好的

       *   即然是流,说明这里既有输入,又有输出。想要输入或输出流对象,可以找Socket来获取。

       *   可以通过getOutputStream、和getInputStream()来获取两个流。

       * 3、客户端发数据到服务端(网络),使用的是输出流,将数据写出,写到网络中去,

       * 4、关闭资源。          

       **/
//创建客户端Socket对象
  Socket socket=new Socket("169.254.30.56", 10003);
  //获取socket流中的输出流
  OutputStream out=socket.getOutputStream();
  //使用输出流将指定的数据写出去。
  out.write("dasdasd".getBytes());
  //关闭资源
  /*
   * 这里就将socket流关闭,那么out流就不用关闭了,因为Socket都连接都关闭了,你流就没有用了。
   */
  socket.close();
}

}

2、服务器端

public class ServerDemo {

    public static void main(String[] args) throws IOException {
/*
* 创建tcp服务端的思路:---
* 1、创建服务端的Socket服务,通过ServerSocket对象。
* 2、服务端必须对外提供一个接口,否侧客户端无法连接。
* 3、获取连接过来的客户端的对象
* 4、通过客户端的对象获取Socket流读取客户端发来的数据,并打印在控制台上
* 5、关闭资源,关客户端,关服务器端。
*/

    //1、创建服务器端的ServerSocket对象

    ServerSocket serverSocket=new ServerSocket(10003);

    //2、获取接连过来的客户端的对象

    Socket s=serverSocket.accept();

    //通过Socket对象获取输入流,要读取客户端发来的数据。

    InputStream in=s.getInputStream();

    byte[] buf=new byte[1024];

        int len=in.read(buf);

        String text=new String(buf, 0, len);

        System.out.println("ip"+text);

        s.close();

        serverSocket.close();
}

}

下面进行图片的分析-----



图片二、----



图片三、------



图片4、-------

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  java 网络编程