------- android培训、java培训、期待与您交流! ----------
网络编程
所谓网络编程,即是Socket编程,在进行网络编程之前,我们需要知道如何获取本机或者他机的IP。
通过导入java.net包内的InetAddress类,通过其静态方法,我们可以获取到本机或者他机的IP地址。通过InetAddress.getLocalHost()可以获得本机IP,通过InetAddress.getByName(“主机名称”)可以获取任意一台主机的IP。如果任意一台主机的IP地址和主机名没有在网络上给出名字仍是其IP地址。
学习网络编程,还需了解网络通讯规则,即网络传输协议。现如今最常用的两种传输协议是TCP和UDP。两者的区别主要如下:
——UDP:面向无连接,发送数据时不需要接收方建立连接
其特点是:a.不需要连接;b.数据包限制小于等于64K;c.是不可靠的协议;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);