作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在使用 wifi direct 时遇到问题。我设法连接了 2 台设备并将数据从客户端发送到群主,因为群主 ip 是每个人都知道的。我还设法找出客户端的 IP 并将其传递给组所有者,但我无法将数据从组所有者发送到客户端,即使它应该是对称的。我使用 Intent
和 startService()
发送数据,使用 AsynkTask
接收数据。仅使用 2 台设备,我注意到客户端 IP 始终相同 (192.168.49.10),因此我手动将其指定给 intent。
这是我尝试为所有者创建发送者和为客户创建接收者的方法:
@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {
// InetAddress from WifiP2pInfo struct.
InetAddress groupOwnerAddress = info.groupOwnerAddress;
connected = true;
ownerIP = groupOwnerAddress.getHostAddress();
// After the group negotiation, we can determine the group owner.
if (info.groupFormed && info.isGroupOwner) {
Toast.makeText(MainActivity.this, "I'm the owner!!", Toast.LENGTH_SHORT).show();
owner = true;
// Do whatever tasks are specific to the group owner.
// One common case is creating a server thread and accepting
// incoming connections.
Intent serviceIntent = new Intent(MainActivity.this, OwnerSender.class);
serviceIntent.setAction(OwnerSender.ACTION_SEND);
serviceIntent.putExtra(OwnerSender.EXTRAS_CLIENT_ADDRESS,"192.168.49.10");
serviceIntent.putExtra(OwnerSender.EXTRAS_CLIENT_PORT, 8988);
startService(serviceIntent);
//new OwnerReceiver(this).execute(); // owner riceve dai client sulla porta 8988
} else if (info.groupFormed) {
// The other device acts as the client. In this case,
// you'll want to create a client thread that connects to the group
// owner.
/*Intent serviceIntent = new Intent(MainActivity.this, ClientSender.class);
serviceIntent.setAction(ClientSender.ACTION_SEND);
serviceIntent.putExtra(ClientSender.EXTRAS_GROUP_OWNER_ADDRESS,ownerIP);
serviceIntent.putExtra(ClientSender.EXTRAS_GROUP_OWNER_PORT, 8988);
startService(serviceIntent);*/
new ClientReceiver(this).execute(); // i client ricevono dall'owner sula porta 8989
Toast.makeText(MainActivity.this, "I'm a client...", Toast.LENGTH_SHORT).show();
Toast.makeText(MainActivity.this, "Server IP: " + groupOwnerAddress.getHostAddress(), Toast.LENGTH_SHORT).show();
}
}
此方法在建立连接时启动,所有者应启动服务以发送数据,但该服务永远不会启动。我已经说过,如果在客户端使用相同的服务并且数据从客户端正确传输到所有者,则相同的服务会启动。
最佳答案
正如 Laszlo Magyar 所说,您需要先向服务器发送一条空消息,以便服务器可以使用客户端套接字获取传入的 ip 地址。
我的解决方案是从客户端向服务器发送一个字符串,这样服务器就可以知道客户端的 ip 地址,其余过程是相同的。
关于Android 无线直连 : How to send data from Group Owner to the clients?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32359071/
我是一名优秀的程序员,十分优秀!