黑马程序员_学习日记十二_网络编程

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

 

网络编程-IP地址

    如何获取本地主机的名称和IP呢?

    在java.net包中提供了InetAddress类,该类表示互联网协议 (IP) 地址。它不提供构造方法,需要通过它提供的一些静态方法获取对象。

    1.staticInetAddress getLocalHost(),该方法返回本地主机。

    2.StringgetHostName(),返回此IP地址的主机名。

    3.StringgetHostAddress(),获取 IP 地址字符串(以文本表现形式)。

    4.staticInetAddress getByName(String host),在给定主机名的情况下确定主机的IP 地址。

TCP和UDP

    UDP传输协议特点:

    1.将数据及源和目的封装成数据包,不需要建立连接,

    2.每个数据报的大小限制在64K以内,

    3.由于无连接,是不可靠协议

    4.不需要建立连接,传输速度快

    TCP传输协议特点,

    1.需要建立连接,形成传输数据的通道,

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

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

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

Socket

    Socket就是为网络服务提供的一种机制,通信的两端都有Socket,网络通信其实就是Socket间的通信,数据在两个Socket间通过IO传输。

UDP-发送端

    UDP协议的Socket服务如何建立呢?

    在java.net包中提供了DatagramSocket类,该类表示用来发送和接收数据报包的套接字。即发送和接收数据报包的Socket,数据报套接字是包投递服务的发送或接收点。每个在数据报套接字上发送或接收的包都是单独编址和路由的。从一台机器发送到另一台机器的多个包可能选择不同的路由,也可能按不同的顺序到达。

    由于UDP协议是以数据报包的形式发送数据的,所以java.net包中又提供了DatagramPacket,该类将Socket两端需要传输的数据封装成对象。

    基于UDP协议传输发送端数据传输步骤:

    1.根据DatagramSocket类建立UDP的Socket服务,

    2.根据DatagramPacket类将所需要传输的数据封装到数据包中,

    3.通过UDP协议的Socket服务,调用send()方法将数据包发送出去,

    4.最后需要将资源关闭。

    示例代码:

        DatagramSocketds = new DatagramSocket();//创建UDP服务,通过DatagramSocket对象。

        byte[] data= “hello,java”.getBytes[];//确定数据,并封装成数据包。

        DatagramPacketdp = new DatagramPacket(data,data.length, InetAddress. getByName (“192.168.1.254”),1000);

        ds.send(dp);//通过Socket服务,将已有的数据包发送出去,调用send()方法。

        ds.close();//关闭资源

UDP接收端

    基于UDP协议传输接收端数据接收步骤

    1.根据DatagramSocket类建立UDP的Socket服务,通常还会传入一个端口作为参数,也就是说给这个接收端定义一个数字标识,方便明确哪些数据接收之后该接收端可以处理。

    2.定义一个数据包对象,因为要存储接收到了字节数据包,而且数据报对象中有更多功能可以提取字节数据中的不同数据。

    3.通过数据报对象的receive()方法,将接收到的数据存入已经定义好的数据报对象中。

    4.通过数据包对象的特有功能,将这些不同数据取出。

    5.关闭资源。

    示例代码:

        DatagramSocketds = new DatagramSocket(10000);//创建基于UDP传输协议的Socket,并且标识此Scoket的端口为1000

        byte[] receData= new byte[1024];//定义一个字节数组,用于存储接收到的数据包。

        DatagramPacketdp = new DatagramPacket(receData, receData.length);//定义数据包,将接收到的数据存储到receData中

        ds.receive(dp);//接收数据包

        StringIP = dp.getAddress().getHostAddress();//获取数据包发送端的IP

        Stringdata = new String(dp.getData(), 0, dp.getLength());//根据接收到的数据包的长度,获取其中的数据

        intport = dp.getPort();//获取数据包发送端的端口

        ds.close();//关闭资源

TCP传输

    基于TCP协议的数据传输,分为客户端和服务器端。

    在java.net包中提供了Socket类,该类就是实现客户端套接字(也可以就叫“套接字”)的类。在套接字是两台机器间通信的端点。Socket对象在建立时,就可以去连接指定服务器,因为TCP协议是面向连接的,所以基于TCP协议的数据传输,就要有服务器端存在,并连接成功。形成通路后在该通道进行数据的传输。注意:在客户端Socket创建以后,就存在Socket输入流和输出流,可以通过OutputStream getOutputStream()方法和InputStream getInputStream()方法分别获取输入流和输出流对象。

    同样,java.net包中提供了ServerSocket类,该类现服务器套接字。服务器套接字等待请求通过网络传入。它基于该请求执行某些操作,然后可能向请求者返回结果。

基于TCP协议传输客户端端数据传输步骤:

    1.通过Socket类创建基于TCP协议客户端,并指定要连接的服务器端和端口。

    2.Socket客户端建立之后, 获取输出流对象,并向对象中写入所要传输的数据

    3.关闭客户端

    示例代码:

        Socketsocket = new Socket(“192.168.1.254”, 10000);//创建客户端

        OutputStreamoutput = socket.getOutputStream();//获取服务器端输出流对象

        Output.write(“hello,java”.getByte());//向输出流中写入数据

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

    基于TCP协议传输服务器端数据传输步骤:

    1.通过ServerSocket类创建基于TCP协议服务器端,并传入一个端口作为参数,

    2.侦听并获取申请访问服务器端的客户端对象,通过调用ServerSocket类的Socket accept()侦听并获取客户端对象。所以这个方法是阻塞方法,如果客户端没有建立连接就会一直等待,

    3.客户端如果发过来数据,那么服务器端就要通过对应的客户端对象,获取到该客户端对象的读取流对象来读取发过来的数据,

    4.关闭服务器端(可选操作)。

    示例代码:

        ServerSocketserverSocket = new ServerSocket(10000);//建立服务器端,传入一个端口作为参数

        Socketsocket = serverSocket.accept();通过accept()方法,获取客户端对象,

        InputStreaminput = socket.getInputStream();//通过getInputStream()方法,获取客户端对象的读取流

        byte[]dataByte = new byte[1024];//定义数组,用于存放数据,

        intlength = input.read(dataByte);//读取客户端发过来的数据,存储到数组dataByte中,

        System.out.println(newString(dataByte, 0, length));//打印到控制台,

        socket.close();//关闭客户端对象(一般都要关闭客户端对象,以免浪费服务器端资源)

        serverSocket.close();//关闭服务器端(看需求而定)

TCP传输-2

    基于TCP协议,客户端和服务器端的互访。(客户端向服务器端发送数据,服务器端收到数据后,给客户端发送反馈信息)

    客户端步骤:

    1.创建基于TCP协议客户端,并指定要连接的服务器端和端口,

    2.Socket客户端建立之后, 获取输出流对象,并向对象中写入所要传输的数据,并发送给服务器端,

    3.获取客户端的输入流对象,用于获取服务器端反馈的数据,并打印到控制台,

    4.关闭客户端。

    示例代码:

        Socketsocket = new Socket(“192.168.1.254”, 10000);

        OutputStreamout = socket.getOutputStream();

        out.write(“hello,java”.getBytes());

        InputStreaminput = socket.getInputStream();

        byte[]buffer = new byte[1024];

        intlength = input.read(buffer);

        System.out.println(newString(buffer, 0, length));

        Socket.close();

    服务器端示例代码:

        ServerSocketserver = new ServerSocket(10000);

        Socketsocket = server.accept();

        InputStreamserverInput = socket.getInputStream();

        byte[]buffer = new byte[1024];

        intlength = serverInput.read(buffer);

        System.out.println(newString(buffer, 0, length));

        OutputStreamout = socket.getOutputStream();

        Out.write(“datareceived…”.getBytes());

        socket.close();

        server.close();

 

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

详细请查看:http://edu.csdn.net/heima   

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值