socket(UDP)

     socket中已经更新了TCP,接下来我们学习UDP,对于UDP来说,按照我个人的理解,就是一种不可靠无连接的网络传输协议,UDP中文翻译过来是用户数据报协议,这样对应我们的socket编程来说呢,我们java特地提供了DatagramPacket这个类来存储我们的信息.我们先写下UDP客户端的demo

package com.iommc;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

public class UDPClient {

	/**
	 * UDP客户端
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1.定义服务器的地址,端口号,数据
		InetAddress address = InetAddress.getByName("localhost");
		int port = 8800;
		byte[] data = "用户名:Amon;密码:123".getBytes();
		//2.创建数据包,包含发送的信息
		DatagramPacket datagramPacket = new DatagramPacket(data,data.length,address,port);
		//3.创建socket对象
		DatagramSocket datagramSocket = new DatagramSocket();
		//4.向服务器发送数据
		datagramSocket.send(datagramPacket);
		/*
		 * 接受服务端的响应
		 */
		//1.创建数据包用于接受服务端
		byte[] data1 = new byte[1024];
		DatagramPacket datagramPacket2 = new DatagramPacket(data1, data1.length);
		//2.接受服务端返回的数据
		datagramSocket.receive(datagramPacket2);
		//3.读取数据
		String reply = new String(data1,0,data1.length);
		System.out.print("我是客服端,服务端说: "+reply);
		//4.关闭资源
		datagramSocket.close();
	}

}



    对于客户端呢,我们首先定义我们的端口号,地址,数据,相当于邮东西时,要写地址和邮的什么东西,然后调用DatagramPacket类,相当于打包,再利用DatagramScoket的send方法邮寄出去,这个socket相当于快递公司,然后对于服务端的响应呢,实际与服务的的响应是是类似的,我们创建的一个存储区域,,然后指定这个存储区域来接受我们接收到的包裹,也就是利用DatagramPacket方法,最后快递公司socket会接受寄件人的包裹,放到我们事先制定好的区域当中.
package com.iommc;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

public class UDPServer {

	/**
	 * UDP服务端
	 * @throws IOException 
	 */
	public static void main(String[] args) throws IOException {
		//1.创建服务器socket,指定端口为8800
		DatagramSocket datagramSocket = new DatagramSocket(8800);
		byte[] data1 = new byte[1024];
		DatagramPacket datagramPacket = new DatagramPacket(data1, data1.length);
		//2.接受服务端返回的数据
		datagramSocket.receive(datagramPacket);
		//3.读取数据
		String reply = new String(data1,0,data1.length);
		System.out.print("我是服务端,客户端说: "+reply);
		
		/*
		 * 向客户端响应数据
		 */
		int port = datagramPacket.getPort();
		InetAddress address = datagramPacket.getAddress();
		byte[] data2 = "欢迎".getBytes();
		DatagramPacket datagramPacket1 = new DatagramPacket(data2,data2.length,address,port);
		datagramSocket.send(datagramPacket1);
		datagramSocket.close();
	}

}

    我们接下来再说说服务端,服务端不论是从响应和传递信息,都是与客户端相反的过程,首先我们寻要定义端口号,相当于只能在这个端口号,才能接受到包裹,我们申明一部分空间,用来保存包裹接受后的存放位置,然后利用datagramSocket的receive方法,接受从客户端传来的包裹.,对于向客户端响应数据来说.我们既然知道从哪个端口发送过来的包裹,那我们还要继续他们家的快递线路,所以getPort,然后填个寄件地址,也是原来的邮件地址,然后把信息放到包裹中,一个send方法,就把包裹邮寄出去了,最后不要忘记关掉我们的socket,就是不要让快递哥再等着了:D

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值