我尝试使用wifi直接从客户端连接到服务器的套接字,所以我在服务器上有以下代码:
ServerSocket serverSocket = new ServerSocket(2009);
Socket client = serverSocket.accept();我在客户端上有这段代码
final WifiP2pDevice peer = wifiP2pDeviceList.get("aMacAddress");
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress=peer.deviceAddress;
mManager.connect(mChannel,config,new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
mManager.requestGroupInfo(mChannel,new WifiP2pManager.GroupInfoListener() {
@Override
public void onGroupInfoAvailable(WifiP2pGroup group) {
try {
Socket socket = new Socket();
int port = 2009;
int timeout = 5000;
socket.bind(null);
socket.connect((new InetSocketAddress(peer.deviceAddress, port)), SOCKET_TIMEOUT); // Error here
}
catch (IOException e){
e.printStackTrace();
}我可以直接使用MAC地址吗?或者我的其他解决方案是什么?
发布于 2014-12-03 16:01:25
套接字通信需要InetAddress而不是deviceAddress字符串。
socket.connect((new InetSocketAddress(address, port)), SOCKET_TIMEOUT);您可以在连接后获取groupOwnerAddress (只能从WIFIP2P获取此IP地址)。
mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo wifiP2pInfo) {
InetAddress address = wifiP2pInfo.groupOwnerAddress;
//socket communication
}
});所有设备都可以获取此地址。向这个地址发送一条消息,groupOwner就可以从套接字中获取你的IP地址。
https://stackoverflow.com/questions/27258687
复制相似问题