面向UDP的Android——PC双向通信(二):实现Android客户端和PC服务器端的双向通信

本文是面向UDP的Android与PC双向通信系列的第二部分,详细讲解了如何在Android客户端和Java服务器端之间实现双向通信。客户端增加了接收消息的方法,并利用Handler更新UI,服务器端新增了发送消息的功能。同时,文章提到了在实现过程中可能遇到的问题,如线程同步、端口号的正确使用等,并预告了下一步将要探讨自定义对象的传输。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导语

上篇博客中,面向UDP的Android——PC双向通信(一):实现Android客户端和PC服务器端的单向通信,我们介绍了如何实现Android客户端向Java服务器端发送消息,这次我们尝试实现两者之间的双向通信。

我们需要实现的是,对于Android客户端,增加接收信息的方法,对于Java服务器端,增加发送消息的方法。

Android客户端

我们需要增加的是接收消息的方法,接收到消息后,将消息显示在页面上。
接收消息的代码与上篇博客Java服务器端接收消息的代码类似:

public DatagramSocket socket;
public void receiveMsg(){
   
   
	try{
   
   
		//创建socket对象
		socket = new DatagramSocket(9999);
		while(true){
   
   
			byte data[] = new byte[1000];
			//创建数据报包
			DatagramPacket request = new DatagramPacket(data,data.length);
			//接收数据报包
			socket.receive(request);
			String s = new String(data,"GBK");
			
			/*将数据显示在页面上*/
			......
		}
	} catch(Exception e){
   
   
		e.printStackTrace();
	}
}

由于接收消息是在子线程中进行的,但组件只能在主线程中进行修改,所以需要用到Android特有的消息处理机制handler机制。

先创建Handler对象,重写handleMessage(Message msg)方法:

private Handler handler = new Handler(){
   
   
	public void handlerMessage(Message msg){
   
   
		String s = (String) msg.obj;
		TextReceive.setText(s);
	}
}

再在接收消息的方法中增加发送消息到主线程消息队列的代码即可:

	Message message = handler.obtainMessage();
	message.obj = s;
	handler.sendMessage(message);

Java服务器端

Java服务器端需要增加发送消息的代码,和Android客户端增加消息的代码类似。

	/**
	 * 发送消息
	 * @throws Exception
	 */
	public void sendMsg() throws Exception{
   
   
		System.out.println("准备发送消息");
		String Msg = MsgSend.getText();
		System.out.println("要发送的消息是:  "+Msg);
		byte data[] = Msg.getBytes("GBK");
		DatagramPacket request =
		        new DatagramPacket(data,data.length,ClientAddress,9999);
		socket.send(request);
		System.out.println("发送成功");
	}

示例代码

客户端代码

package com.myscelyn.udpclient;

import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值