java网络编程之一

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、-------



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值