黑马程序员--------java 网络编程

来源:互联网 发布:洗车优惠的软件 编辑:程序博客网 时间:2024/05/16 17:28

-----------android培训java培训、java学习型技术博客、期待与您交流!------------


网络编程

 

逻辑端口:用于标识进程的逻辑地址,不同进程的标识;有效端口:0-65535,其中0-1024系统使用或为保留端口

Socket(套接字,通信的端点):为网路服务提供一种机制,通信两端都有Socket,网路通信其实就是Socket间的通信,数据在两个Socket间通过IO传输

网络传输协议:UDP  、TCP

UDP:1、将数据源和目的封装成数据包中,不需要建立连接

     2、每个数据包的大小限制在64k内

           3、因无连接,是不可靠协议

           4、不需要建立连接,速度快

 

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

    2、在连接中进行大数据量传输

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

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

UDP传输:

1、特点:只要是网路传输必须有socket服务;数据一定要封装到数据包中,数据包中包括目的地址、端口、数据等信息

2、操作方式:

  1)直接操作udp不可能,对于java语言应该将udp封装成对象——DatagaramSocket,即封装了udp传输协议的socket对象

  2)因为数据包中包含的信息较多,为了操作方便,也一样将其封装成对象——DatagramPacket,通过这个对象的方法,就可以获取到数据包中的各种信息

  3)DatagramSocket具备接收可发送功能,在进行udp传输时,需要明确一个是发送端一个是接收端

3、建立UDP发送端步骤:

   1、建立udpsocket服务,创建对象时没有明确端口,系统会自动分配一个未使用的端口

   2、明确要发送的具体数据,并将数据封装成数据包

   3、调用socket服务的send方法将数据包发送出去

   4、关闭资源

——————————————————

importjava.net.*;

classUdpSend

{

         public static void main(String[] args)throws Exception

         {

                   //创建udp服务

                   DatagramSocket ds = newDatagramSocket(9999);

 

                   //确定数据,并封装成数据包 DatagramPacket(byte[] buf,int length, InetAddress address, int port)

 

                   byte[] buf = "UDP wo laila ".getBytes();

DatagramPacket dp =new DatagramPacket(buf,buf.length,InetAddress.getByName("192.168.1.103"),10000);

                  

                   //通过socket服务将已有的数据包发送出去

                   ds.send(dp);

 

                   //关闭资源

                   ds.close();

         }

}

 

4、建立UDP接收端步骤:

1、创建udp的socket服务,必须要明确一个端口,作用在于,只有发送到这个端口的数据才是这个接收端可以处理的数据。

2,定义数据包,用于存储接收到数据。

3,通过socket服务的接收方法将收到的数据存储到数据包中。

4,通过数据包的方法获取数据包中的具体数据内容,比如ip、端口、数据等等。

5,关闭资源。

——————————————————

classUdpReceive

{

    public static void main(String[] args)throws Exception

{

//  1,创建udp的socket服务

        DatagramSocket ds = newDatagramSocket(10000);

// 2,定义数据包,用于存储接收到数据。先定义字节数组,数据包会把数据存储到字节数组中

        byte[] buf = new byte[1024];

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

// 3,通过socket服务的接收方法将收到的数据存储到数据包中

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

// 4,通过数据包的方法获取数据包中的具体数据内容,比如ip,端口,数据等等

        String ip =dp.getAddress().getHostAddress();

        int port = dp.getPort();

        String text = newString(dp.getData(),0,dp.getLength());//将字节数组中的有效部分转成字符串

        System.out.println(ip+":"+port+"--"+text);

// 5 关闭资源。

        ds.close();

    }

}

练习:

 

TCP传输:

1、特点:两个端点建立连接后会有一个传输数据的通道,这个通道称为流,而且是建立在网络基础上的流,称之为socket流。该流中既有读取,也有写入

2、TCP的两个端点:客户端和服务端

  * 客户端:对应的对象——Socket

  * 服务端:对应的对象——ServerSocket

3、建立TCP客户端:

1,建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)

2,如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象

3,关闭资源

——————————————————————————

importjava.io.*;

importjava.net.*;

classTcpClient

{

    public static void main(String[] args)throwsException

    {

        Socket s = newSocket("192.168.1.103",10005);//创建socket服务,并指定连接主机和端口号

        OutputStream os = s.getOutputStream();//获取socket的输出流,给服务端发送数据

        os.write("TCP ge men wo laile".getBytes());

        s.close();//关闭客户端

    }

}

4、建立TCP服务端:

   1、建立服务端的socket服务——ServerSocket,并监听一个端口

2、获取连接过来的客户端对象,通过ServerSocket的accept方法,没有连接就会等待,所以这个方法为阻塞式方法

3、客户端如果发过来数据,那么服务端要使用对应的客户端对象,并获取到该对象的读取流来读取客户端数据

4、关闭服务端(可选择操作),如要关闭先关客户端,在关服务端

——————————————————————

classTcpServer

{

    public static void main(String[] args)throws Exception

    {

        ServerSocket ss = newServerSocket(10005);//建立服务端,并监听10005端口

        Socket s = ss.accept();//通过accept方法获取连接的客户端对象

        String ip =s.getInetAddress().getHostAddress();//获取客户端对象的IP

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

        byte[] buf = new byte[1024];//建立一个数组来存储读取的数据

        InputStream is = s.getInputStream();//创建一个客户端对象的输入流,来读取客户端数据

        int x= is.read(buf);

        String file = new String(buf,0,x);//将数组中的数据转换为字符串形式

        System.out.println(file);

        s.close();

        ss.close();//关闭服务端

    }

}

练习:

 

URL

1、类 URL 代表一个统一资源定位符,它是指向互联网资源的指针。资源可以是简单的文件或目录,也可以是对更为复杂的对象的引用,例如对数据库或搜索引擎的查询


-----------android培训java培训、java学习型技术博客、期待与您交流!------------

0 0