001-SE-0011-网络编程

网络编程三要素
	* ip地址
	* 端口
	* 协议

InetAddress类
	* java操作ip地址的类
	* 获取对象
		*InetAddress address = InetAddress.getByName(String arg);
			* 参数arg可以是字符串主机名,例如:"fanshoujun"
			* 参数arg可以是字符串ip地址,例如:"192.168.126.1"
		* 常用方法
			* getHostName();//获取主机名
			* getHostAddress();//获取字符串ip地址

协议
	* UDP
		* 将数据源和目的地封装在包中,不需要建立连接
		* 每个数据包的大小限制在64k
		* 因为不建立连接,所以是不可靠协议
		* 因为不建立连接,所以速度快
	* TCP
		* 建立连接,形成数据传输的通道
		* 通过三次握手完成连接
		* 因为建立连接,所以可靠
		* 因为建立连接,所以速度稍慢

Socket
	* 也叫套接字
	* ip地址和端口组合在一起叫套接字
	* socket通信原理
		* 通信两端都有socket
		* 网络通信其实就是socket之间的通信
		* 数据在两个socket之间某种协议下通过io传输

UDP发送数据
	import java.net.DatagramPacket;
	import java.net.DatagramSocket;
	import java.net.InetAddress;

	/**
	 * UDP发送数据	
	 * @author fanshoujun
	 */
	@Test
	public void sendMessage() throws Exception {
		//创建socket对象
		DatagramSocket socket = new DatagramSocket();
		//要发送的数据
		byte[] bys = "hello world".getBytes();
		//数据的长度
		int len = bys.length;
		//目的地ip地址
		InetAddress address = InetAddress.getByName("fanshoujun");
		//目的地端口
		int port = 10000;
		//将数据打包
		DatagramPacket pack = new DatagramPacket(bys, len, address, port);
		//发送数据包
		socket.send(pack);
		//关闭通道
		socket.close();
	}

UDP接收数据
	@Test
	public void receiveMessage() throws Exception {
		//创建socket对象,参数为端口
		DatagramSocket socket = new DatagramSocket(10000);
		//定义数组存储数据
		byte[] bys = new byte[1024];
		//数组的长度
		int len = bys.length;
		//定义数据包用于接收数据,实际存储数据的是数组bys,长度是len
		DatagramPacket pack = new DatagramPacket(bys, len);
		//接收数据
		socket.receive(pack);
		//从接收的数据中获取发送端的地址
		InetAddress address = pack.getAddress();
		//将发送端的地址转成String
		String ip = address.getHostAddress();
		//从数据包中取出数据
		byte[] data = pack.getData();
		//数据的长度
		int length = pack.getLength();
		//将数据转成String
		String str = new String(data,0,len);
		//打印出来
		System.out.println(ip+":"+str+":"+length);
	}

TCP发送数据
	@Test
	public void sendMessage() throws Exception {
		// 建立客户端socket服务
		Socket socket = new Socket("192.168.25.1", 8888);
		// 获取输出流流对象(这个步骤只要一执行就开始三次握手)
		OutputStream outputStream = socket.getOutputStream();
		// 发送消息
		outputStream.write("发送消息了...".getBytes());
		// 关闭资源
		socket.close();
	}

TCP接收数据
	@Test
	public void receiveMessage() throws Exception {
		//建立服务端对象,监听一个端口
		ServerSocket serverSocket = new ServerSocket(8888);
		//通过accept方法获取客户端对象
		Socket socket = serverSocket.accept();
		//获取输入流
		InputStream inputStream = socket.getInputStream();
		//接受数据
		byte[] bys = new byte[1024];
		int len = inputStream.read(bys);
		String message = new String(bys,0,len);
		System.out.println(message);
		//关闭资源
		socket.close();
		serverSocket.close();
	}

网络七层


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值