黑马程序员——网络编程基础

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

网络编程

所谓网络编程,即是Socket编程,在进行网络编程之前,我们需要知道如何获取本机或者他机的IP

通过导入java.net包内的InetAddress类,通过其静态方法,我们可以获取到本机或者他机的IP地址。通过InetAddress.getLocalHost()可以获得本机IP,通过InetAddress.getByName(“主机名称”)可以获取任意一台主机的IP。如果任意一台主机的IP地址和主机名没有在网络上给出名字仍是其IP地址。

学习网络编程,还需了解网络通讯规则,即网络传输协议。现如今最常用的两种传输协议是TCPUDP。两者的区别主要如下:

——UDP:面向无连接,发送数据时不需要接收方建立连接

其特点是:a.不需要连接;b.数据包限制小于等于64Kc.是不可靠的协议;d.不需 要建立连接,速度快,但容易丢失数据包。

——TCP:面向连接,发送数据时需要双方都在线

其特点有:a.双方建立连接,形成数据传输通道;b.在连接中进行大量数据的传送; c.需三次握手完成连接,是可靠的协议;d.必须得建立连接,所以效率稍低。

通过对毕老师教学视频的学习,记录如下,要想玩转Socket,主要记住以下流程:

首先,数据发送端:1.建立Socket服务;2.提供数据并将其封装到数据包中;3.通过Socket服务发送功能将数据包发送出去;3.之后关闭资源。

UDP传输方式进行代码解析:

1、创建UDPSocket服务

DatagramSocket ds=new DatagramSocket();

2、确定数据并封装成数据包

Byte[]data=”wo d d d sd ”.getBytes();

DatagramPacket dp=new DatagramPacket(data,data.length,InetAddress.getByName(“主机名称”,端口标识));

3、通过Socket服务将已经装好包的数据发送出去

Ds.send(dp);

4、关闭资源

Ds.close();

 

其次,数据接收端:1.建立Socket服务;2.定义个数据包储存接收到的字节数据,因为数包对象有足够的功能可以提取字节数据的不同数据信息;3.通过Socket服务的Receive方法将接收到的数据存入已经定义好的数据包中;4.通过数据包对象特有功能将这些不同的数据去除,输出至目的地;5.关闭资源。

同样也是以UDP传输方式进行代码解析:

1、创建UDPSocket服务,并建立端口

DatagramSocket ds=new DatagramSocket(端口标识);

2、定义一个数据包用于存放数据

Byte []buf=new byte[1024];

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

3、通过Socket服务的Receive方法接受数据包并将其存放入数据包中

Ds.recieve(dp);

4、通过数据包特有的方法将接收到的数据解析

String IP=dp.getAddress().getHostAddress();//获取发送端IP

String data=new String(dp.getData(),0,dp.getLength());//将接收到的数据转换为字符串

Int pot=dp.getPort();

5、关闭资源

Ds.close();

 

 

TCP网络传输协议是面向连接,对应的是客户端和服务端,只要客户端一建立就得寻求服务端并与之连接。

TCP客户端对象是Socket    服务端对象是ServerSocket

通过TCP进行数据传输的主要步骤:

因为TCP是面向连接的,所建立Socket服务时,就需要有服务端存在,并且连接成功形成通路后,再在该通道进行数据传输。

客户端:

1、创建Socket服务,并且制定要连接的主机和端口

Socket soc=new Socket(“host”,port);

2、发送数据,获取Socket里的输出流

OutputStream out=soc.getOutputStream();

Out.write(“kjgdsfuigui”.getBytes());//输出数据

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

客服端:

1、建立服务端的Socket服务,并且监听一个端口

ServerSocket ss=new ServerSocket(port);

2、获取连接过来的客户端对象使用accept方法(该方法是阻塞式的,没有连接就会等待)

Socket s=ss.accept();

3、获取客户端发过来的数据,使用客户端对象的读取流

InputStream in=s.getInputStream();

//Byte[]buf=new byte[1024];

//Int len=in.read(buf);

 

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

你可能感兴趣的:(学习日记)