UDP单向通信----手机发消息给电脑

要实现UDP通信,我们先来简单了解一下UDP协议

UDP和TCP一样是用来处理数据包的协议,但它和TCP又不一样:

1.UDP是无连接协议,客户端和服务器通信前不需要先建立连接,自然就没有TCP中等待连接accept()这个方法,通俗来说,TCP协议就像打电话,要先拨号接通以后二者才能通话,而UDP不用接通就可通话

2.UDP处理和传递消息效率高于TCP,因为UDP是无连接协议,所以资源的消耗相对小一些。

3.UDP在网络状态差强人意的状况下,数据包的丢失现象比较严重,所以具有一定的不可靠性。

以下我们来简单实现UDP的单方通信:

1.先新建立一个Java Project,里面写有关服务器的代码。如下:

 

以下内容写在主函数中

public static void main(String[] args) throws IOException{
		System.out.println("服务器准备好了");
		DatagramSocket socket;
		try {
		    //指定端口号
			socket = new DatagramSocket(8099);
			
			while(true){
			//创建字节数组,规定接收消息的最大长度	
			byte[]  msg=new byte[10];
			
			DatagramPacket request = new DatagramPacket(msg, 10);
				//程序很可能会阻塞在这里等待接收消息
				socket.receive(request);
				
				String s=new String(msg,"UTF-8");
				
				System.out.println("收到消息: "+s);
			}
			 
			
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} 

		
	}

2.新建一个Android Application Project,我的叫做UDPClient,里面写客户端部分

建立好工程以后,我们要给我们的客户端加上权限才可以实现与电脑的通信,如图

 

 

 

 

3.对于客户端来说,我们需要在界面添加一个“发送”按钮和一个消息输入框,并给按钮加上监听

输入框EditText msg最好设成全局变量,3因为后面方便获得输入框中的内容

Button send=(Button)this.findViewById(R.id.button1);
        msg=(EditText)this.findViewById(R.id.editText1);
        send.setOnClickListener(this);

4.自定义一个发送消息的方法void sendMsg(String message){},其中的参数是需要发送的消息,方法体中创建DatagramSocket对象,获取你所需要连接的电脑的IP,然后将发送的消息装进DatagramPacket中,指定要发送的地址,调用DatagramSocket对象的send()方法

 

 public void sendMsg(String message){
    
    	try {
			DatagramSocket socket = new DatagramSocket();
			
			//目标地址
			InetAddress host = InetAddress.getByName("192.168.31.98");
			
			//指定包要发送的目的地
			byte[] data=message.getBytes("UTF-8");//指定UTF-8可以实现中文收发
			DatagramPacket request =new DatagramPacket(data,data.length, host, 8099);
			
			//发送
	        socket.send(request);
	       
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			
		}
    }

5.在监听中写入线程,在线程中调用发送消息的方法void sendMsg(String message){},这里我突然觉得不是很好。。。因为每点击一次“发送”按钮就会启动一个线程,也就是手机如果给电脑发送N条消息,就会启动N个线程,线程过多会导致资源的浪费而且会降低CPU的利用效率,所以这段代码还有待改进

public void onClick(View v) {
	
		
		new Thread(new Runnable() {
			
			@Override
			public void run() {
				
				try {
					
					sendMsg(msg.getText().toString());
				
				} catch (Exception e) {
					
					e.printStackTrace();
				}
			}
		}).start();
		
	}

到这里简单的UDP单向通信就完成了,以下是效果图

 

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值