------- android培训、java培训、期待与您交流! ----------
网络编程
★学习重点
- TCP/IP协议
- InetAddress类
- DatagramSocket类 和 DatagramPacket类
- ServerSocket类 和 Socket类
★第一节:TCP/IP协议
- 通过IP地址可以连接到指定计算机,但如果想访问目标计算机中的某个应用程序,
- 还需要指定端口号。
★第二节:InetAddress类:这个类用于封装一个IP地址,列举InetAddress类的方法
- InetAddress getByName(String host)参数host表示指定的主机,该方法用于在给
- 定的主机名的情况下确定主机的IP地址。
- InetAddress getLocaHost()创建一个表示本地主机的InetAddress对象。
- String getHostName()得到IP地址的主机名,如果是本机则是计算机名,不是本机
- 则是主机名,如果没有域名则是IP地址。
- boolean isReachable(int timeout)判断指定的时间内地址是否可以到达。
- String getHostAddress()得到字符串格式的原始IP地址。
★第三节:DatagramSocket类 和 DatagramPacket类
- DatagramPacket类:使用这个类来封装UDP通信中发送或者接收的数据。
- DatagramSocket类:使用这个类就可以接受和发送DatagramPacket数据包。
★DatagramPacket类的构造方法:
- DatagramPacket(byte[]buf,int length):指定了封装数据的字节数组和数据大小,
- 没有指定IP和端口号,所以这个构造方法用于接收端。
- DatagramPacket(byte[]buf,int length,InetAddress addr,int port):指定了封装
- 数据的字节数组和数据的大小,还指定了数据包的IP(addr)和端口号(port),所以
- 这个构造方法用于发送端。
★DatagramPacket类中的方法:
- InetAddress getAddress()用于返回发送端或者接收端的IP地址
- int getPort()用于返回发送端或者接收端的端口号
- byte[]getData()用于返回将要接接收或者将要发送的数据
- int getLength()用于返回接收或者将要发送数据的长度
- DatagramSocket():用于创建发送端的DatagramSocket对象,无端口号,系统分配
- DatagramSocket(int port):用于创建接收端的DatagramSocket对象,并指定一个端口号,
- 也可以创建发送端的DatagramSocket对象。
- DatagramSocket(int port,InetAddress addr):这种情况适用于计算机上有多快网卡的情况。
★DatagramSocket类的方法:
- void receive(DatagramPacket p):用于将接收到的数据填充到DatagramPacket数据包中。
- void send(DatagramPacket p):该方法用于发送DatagramPacket数据包,发送的数据包中
- 包含将要发送的数据,数据的长度,远程主机的IP地址和端口号。
- void close():关闭当前的Socket,通知驱动器程序释放为这个Socket保留的资源。
★UDP网络程序的实例
- 接收端程序
package cn.itbasis;
/*
*UDP网络实例:
*因为要现有接收端接受数据包,数据才不至于丢失,所以,先编写一个接收端,在编写发送端
*/
import java.net.*;
//接收端程序
public class Example04 {
public static void main(String[] args) throws Exception{
//创建一个长度为1024的字节数据,用于接收数据
byte[] buf = new byte[1024];
//定义一个DatagramSocket对象,监听的端口为10000;
DatagramSocket ds = new DatagramSocket(10000);
//定义一个DatagramPacket对象,用于接收数据
DatagramPacket dp = new DatagramPacket(buf,1024);
System.out.println("等待接收数据");
//等待接收数据,如果没有数据将会阻塞
ds.receive(dp);
//调用DatagramPacket的方法获得接收到的信息,包括数据的内容,长度,发送的IP地址和端口号
String str = new String(dp.getData(),0,dp.getLength())+
"from"+dp.getAddress().getHostAddress()+":"+dp.getPort();
//打印接收到的信息
System.out.println(str);
//关闭资源
ds.close();
}
}
- 发送端程序
package cn.itbasis;
/*有了接收端,开始编写发送端程序
*
*/
import java.net.*;
public class Example05 {
//发送端程序
public static void main(String[] args) throws Exception{
//创建一个DatagramSocket对象
DatagramSocket ds = new DatagramSocket(10000);
//要发送的数据
String str = "Hello World";
//创建一个要发送的数据包,数据包包括发送的数据,数据长度,接受端的IP,端口号
DatagramPacket dp = new DatagramPacket(str.getBytes(),str.length(),
InetAddress.getByName("localhost"),10000);
System.out.println("发送信息");
//发送数据
ds.send(dp);
//释放资源
ds.close();
}
}