📄 locateserver.java
字号:
package org.tuna.net.locate;
import java.io.*;
import java.net.*;
import java.nio.*;
import java.nio.charset.*;
public class LocateServer extends Thread
{
private boolean stopCommand;
public LocateServer()
{
stopCommand = false;
}
// ------ For Thread ------
public void run()
{
try{
DatagramSocket srvSocket = new DatagramSocket(DataField.LOCATE_SERVER_PORT);
byte[] receiveData = new byte[DataField.LOCATE_INFO_LEN * 4];
Charset cset = Charset.forName("UTF-16");
ByteBuffer buf = cset.encode(DataField.LOCATE_RESPONSE);
byte[] sendData = buf.array();
//DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length,
while(!stopCommand){
DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length);
srvSocket.receive(receivePacket);
ByteBuffer buffer = ByteBuffer.wrap(receiveData, 0, receiveData.length);
CharBuffer cbuf = cset.decode(buffer);
String rcv = cbuf.toString().trim();
if (rcv.length() < DataField.LOCATE_INFO_LEN)
continue;
else if (rcv.substring(0, DataField.LOCATE_INFO_LEN).equals(DataField.LOCATE_REQUEST)){
System.out.println("New request comes from " + receivePacket.getAddress().getHostAddress() + ":" + receivePacket.getPort());
newRequest();
InetAddress clientAddr = receivePacket.getAddress();
int clientPort = receivePacket.getPort();
DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, clientAddr, clientPort);
srvSocket.send(sendPacket);
}
}
srvSocket.close();
}
catch(Exception e){
e.printStackTrace();
}
}
// ------ Public Methods ------
/**
* 定位成功后会调用此方法
*/
public void newRequest()
{
//System.out.println("request");
}
public void stopThread()
{
stopCommand = true;
}
// ------ For Test ------
public static void main(String[] args)
{
LocateServer ls = new LocateServer();
ls.start();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -