【发布时间】:2014-07-04 20:54:59
【问题描述】:
我正在开发一个客户端/服务器项目,客户端是 Android,服务器是 C#。
我想要做的是 Android 应用程序在 UDP 套接字上侦听,C# 服务器在该端口上发送消息。然后,Android 会从回复中接收消息,并发回回复。
这是我的代码:
public void run()
{
Log.d(TAG, "Heartbeat manager thread starting");
try
{
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);
DatagramSocket socket = new DatagramSocket(HEARTBEAT_PORT);
byte[] buffer = new byte[1024];
DatagramPacket packet = new DatagramPacket(buffer, buffer.length);
while (!cancelThread)
{
socket.receive(packet);
final String xml = new String(packet.getData(), 0, packet.getLength());
Log.v(TAG, xml);
XmlSettings xmlSettings = new XmlSettings();
xmlSettings.setIndent(true);
XmlWriter writer = new XmlWriter(xmlSettings);
writer.writeStartDocument();
writer.writeStartElement("HeartbeatManager");
writer.writeElementString("Command", Defines.ServerCommands.HeartbeatResponse.toString());
writer.writeEndElement();
buffer = writer.returnXmlOutput().getBytes();
DatagramPacket replyPacket = new DatagramPacket(buffer, buffer.length);
socket.send(replyPacket);
}
}
catch (SocketException ex)
{
Log.e(TAG, "Socket Exception Occurred: " + ex.toString());
}
catch (IOException ex)
{
Log.e(TAG, "IOException Occurred: " + ex.toString());
}
目前,当我执行 socket.send 声明目标地址为空时,它会引发异常。
【问题讨论】:
-
旁注我认为您对“服务器”的定义是根据设备的大小来定义的……通常侦听传入请求的人(“Android 应用程序侦听 UDP 套接字”)称为“服务器”。 ..
-
我将 C# 称为服务器,因为它是做大部分工作的服务器,通常不是它进行监听,但是,对于项目的这一部分,我需要 android 来监听跨度>