Android 安卓网络搜索
我正在创建一个应用程序,该应用程序将要求人们通过WiFi相互连接,以使他们能够一起玩 但是,我不想通过IP地址搜索一个人,我想搜索当前所有主持游戏的人,并更新我可以点击连接的人的列表 服务器Android 安卓网络搜索,android,sockets,wifi,Android,Sockets,Wifi,我正在创建一个应用程序,该应用程序将要求人们通过WiFi相互连接,以使他们能够一起玩 但是,我不想通过IP地址搜索一个人,我想搜索当前所有主持游戏的人,并更新我可以点击连接的人的列表 服务器 public class server extends AppCompatActivity { int numPlayers=0; int count = 0; TextView infoip, msg; String message = ""; ServerSocket serverSocket; pri
public class server extends AppCompatActivity {
int numPlayers=0;
int count = 0;
TextView infoip, msg;
String message = "";
ServerSocket serverSocket;
private String name="server";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_server);
Bundle b = this.getIntent().getExtras();
numPlayers = b.getInt("numPlayers");
//name = b.getString("name");
infoip = (TextView) findViewById(R.id.serverText);
msg = (TextView) findViewById(R.id.serverPlayerCount);
infoip.setText("Hosting...");
Thread socketServerThread = new Thread(new SocketServerThread());
socketServerThread.start();
ButtClickListener();
}
@Override
protected void onDestroy() {
if (serverSocket != null) {
try {
serverSocket.close();
} catch (IOException e) {
e.printStackTrace();
}
super.onDestroy();
}
}
private void ButtClickListener() {
Button cancel = (Button) findViewById(R.id.severQuit);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
}
private class SocketServerThread extends Thread
{
static final int SocketServerPORT = 8080;
@Override
public void run() {
try {
serverSocket = new ServerSocket(SocketServerPORT);
server.this.runOnUiThread(new Runnable() {
@Override
public void run() {
}
});
while (true) {
Socket socket = serverSocket.accept();
count++;
message += "#" + count + " from " + socket.getInetAddress()
+ ":" + socket.getPort() + "\n";
server.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
SocketServerReplyThread socketServerReplyThread = new SocketServerReplyThread(
socket, count);
socketServerReplyThread.run();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
private class SocketServerReplyThread extends Thread {
private Socket hostThreadSocket;
SocketServerReplyThread(Socket socket, int c) {
hostThreadSocket = socket;
count = c;
}
@Override
public void run() {
OutputStream outputStream;
String msgReply = "You are the #" + count+" person out of "+count+"/"+numPlayers;
try {
outputStream = hostThreadSocket.getOutputStream();
PrintStream printStream = new PrintStream(outputStream);
printStream.print(msgReply);
printStream.close();
message += msgReply + "\n";
server.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
} catch (IOException e) {
e.printStackTrace();
message += "Error " + e.toString() + "\n";
}
server.this.runOnUiThread(new Runnable() {
@Override
public void run() {
msg.setText(message);
}
});
}
}
private String getIpAddress() {
String ip = "";
try {
Enumeration<NetworkInterface> enumNetworkInterfaces = NetworkInterface
.getNetworkInterfaces();
while (enumNetworkInterfaces.hasMoreElements()) {
NetworkInterface networkInterface = enumNetworkInterfaces
.nextElement();
Enumeration<InetAddress> enumInetAddress = networkInterface
.getInetAddresses();
while (enumInetAddress.hasMoreElements()) {
InetAddress inetAddress = enumInetAddress.nextElement();
if (inetAddress.isSiteLocalAddress()) {
ip += "SiteLocalAddress: "
+ inetAddress.getHostAddress() + "\n";
}
}
}
} catch (SocketException e) {
// TODO Auto-generated catch block
e.printStackTrace();
ip += "Something Wrong! " + e.toString() + "\n";
}
return ip;
}
}
上面的代码将在我通过单击找到服务器时实现,我将能够通过名称连接到服务器,但我不知道如何搜索服务器
如何修改客户端,使其在运行时搜索所有可能的服务器并返回服务器名称列表
谢谢。我认为这是一个很好的网络服务发现用例你应该看看谷歌附近的API。根据我的理解,我必须修改我的服务器端以进行注册,对吗?是的,服务器应用程序应该注册服务,然后客户端可以发现该服务。我认为与您当前的方法相比,它实际上更容易实现
public class ClientThread implements Runnable {
public void run() {
try {
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Socket socket = new Socket(serverAddr,
8080);
connected = true;
while (connected) {
try {
} catch (Exception e) {
}
}
socket.close();
} catch (Exception e) {
connected = false;
}
}
}