黑马程序员_网络编程

------- 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对象,无端口号,系统分配
  • 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();
	}
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值