JAVA学习二十二:Net网络编程

来源:互联网 发布:淘宝店推广预算计划书 编辑:程序博客网 时间:2024/06/11 04:50

Java学习——new网络编程

 

网络传输的三个基本要素:IP地址、端口、传输协议。

网络的参考模型:

QSI参考模型

TCP/IP参考模型

应用层

应用层

表示层

会话层

传输层

传输层

网络层

网络层

数据链路层

主机层

物理层

 

 

 

UDPTCP

UDP的特点:

1、将数据及源和目地封装成数据包,不需要建立连接;(面向无连接)。

2、每个数据包的大小都限制在64k内;(数据会被封包)。

3、因无连接,是不可靠的协议;(不可靠,安全性不高)。

4、不需要建立连接,速度快;(数据传输速度快)。

 

TCP的特点:

1、建立连接,形成传输数据的通道。

2、通过三次握手完成连接,是可靠的协议。

3、必须建立连接,效率会稍低。

 

 

UDP发送端和接收端创建步骤:

发送端:

第一步:创建UDP Socket服务,通过DatagramSocket对象创建。

第二步:确定数据,并封装成数据包,通过DatagramPacket对象创建。

第三步:通过UDP服务,将已有的数据包发送出去,使用send方法。

第四步:关闭资源,通过DatagramSocketclose方法。

UDP发送端示例:

class UDPsend

{

       public static void main(String[] args)

       {

              //创建UDP服务。

DatagramSocket ds = new DatagramSocket();

             

//确定数据,并封装成数据包。

byte[] buf = “UDP发送端”.getBytes();

DatagramPacket dp =

 new DatagramPacket(buf,buf.length,InetAddress.getByName(“127.0.0.1”),10000);

             

              //通过UDP Socket服务的send()方法,将数据包发送出去。

ds.send(dp);

 

//关闭资源。

              ds.close();

}

}

 

 

接收端:

第一步:创建UDP Socket服务,通过DatagramSocket对象创建,并指定一个监听端口。

第二步:定义一个数据包,通过DatagramPacket来创建,同时让该数据包接收一个字节数组,让该数组作为数据包中的缓冲区,用来存放接收到的数据;而且数据包对象中有更多功能,可以很方便的提取字节数据中的不同数据信息。

第三步:通过UDP服务的receive方法将收到的数据存入到已定义好的数据包中。

第四步:通过数据包对象的特有功能,将这些不同的数据取出。

第五步:关闭资源。

UDP接收端示例:

class UDPreceive

{

       public static void main(String[] args)

       {

              //创建UDP Socket服务,并指定端口,建立端点。

              DatagramSocket ds = new DatagramSocket(10000);

             

              //定义数据包,用于存放接收到的数据。

              byte[] buf = new byte[1024];

              DatagramPacket dp = new DatagramPacket(buf,buf.length);

             

              //通过UDP Socket服务的receive方法,将接收到的数据存入数据包缓冲中。

              ds.receive(dp)//该方法是阻塞式的。

             

              //通过数据包的方法,获取其中的数据。

              String ip = dp.getAddress().getHostAddress();     //获取发送端ip地址。

              String data = new String(dp.getData(),0,dp.getLength());   //获取发送端发出的数据。

              int port = dp.getPort();   //获取端口。

              System.out.println(ip+”:”+data+”:”+port);   

             

              //关闭资源。

              ds.close();

}

}

 

 

 

 

 

TCP客户端和服务端创建步骤:

客户端:

第一步:创建客户端的Socket服务,并指定目的主机和端口。

第二步:获取Socket服务的输出流,为发送数据而做的准备。

第三步:向服务器发送数据,并将数据转换成字节数组后在发送。

第四步:关闭客户端;(数据发送完后,要断开与服务器的连接,来释放服务器的资源)。

TCP客户端示例:

class TCPClinet

{

       public static void main(String[] args)

{

       //创建客户端的Socket服务,并指定目的主机和端口。

       Socket s = new Socket(“127.0.0.1”,10000);

      

       //获取Socket服务中的输出流。

       OutputStream out = s.getOutputStream();

      

       //向服务器发送数据,并将数据转换成字节数组后在发送。

       out .write(“TCP客户端”.getByte());

      

       //关闭客户端

       s.close();

}

}

 

服务端:

第一步:建立服务端的ServerSocket服务,并指定一个监听端口。

第二步:获取连接过来的客户端对象,通过accept方法;(该方法是阻塞式的方法)。

第三步:获取客户端的读取流来读取客户端发送过来的数据。

第四步:关闭客户端(数据发送完后,要断开与服务器的连接,来释放服务器的资源)。

       关闭服务端(是个可选项,因为在实际网络应用中,服务器通常是全天候运行的)。

TCP服务端示例:

class TCPServer

{

       public static void main(String[] args)

       {

              //创建服务端的ServerSocket服务,并监听一个端口。

              ServerSocket ss = new ServerSocket(10000);

             

              //通过accept方法获取连接过来的客户端对象。

              Socket s = ss.accept();  //该方法是阻塞式的。

              String ip = s.getInetAddress().getHostAddress(); //获取连接过来的客户端ip地址。

              System.out.println(ip为:”ip+“:的客户端已连接”);

             

              //获取客户端的读取流来读取客户端发送过来的数据。

              InputStream in = s.getInputStream();

             

             定义一个字节数组作为容器,将读取到的数据存入字节数组中。

              byte[] buf = new byte[1024];

              int len = in.read(buf);     //read也是个阻塞式方法。

              System.out.println(new String(buf,0,len));

             

              //关闭客户端,断开与服务器的连接。释放服务器的资源。

              s.close();

             

//关闭服务,(可选操作,通常情况下不使用)。

              ss.close();

}

}

 

 

 

 

 

原创粉丝点击