我正在开发一个应用程序,它应该通过蓝牙自动连接2个Android设备.假设他们已经配对了.是否有可能实现这一目标?
我目前正致力于为Android移动设备创建应用程序,该应用程序应能够通过本地方式(如wifi和蓝牙)发送和接收消息.在对它进行研究之后,我发现Android没有本机wifi ad hoc功能,而实现这一点的唯一方法是通过生根设备并修补wpa_suplicant以及其他一些非通用的方法. .
我想要实现的内容概要:
Android应用程序扫描附近的设备并尝试自动连接到它们.如果其他设备也获得了该应用程序,则它会自动接受它收到的任何连接请求,并且当建立连接时,它会发回一条消息,确保安装了此应用程序,以便两者都可以自动开始交换消息,并且用户不会必须实时允许/拒绝任何发送/接收.
我的问题是:
如果你能给我答案那些和/或任何建议,我会很高兴的.
我有一个服务器客户端应用程序,它使用数据报套接字来交换消息.我最初将缓冲区大小设置为1024字节,因为我不知道消息的长度.当我发送短于1024字节的内容时,我将其余的字符串显示为一些奇怪的字符(空字符或我不确定它们是如何被调用的).这是一个屏幕:

客户代码:
byte[] buf = ("This is another packet.\n").getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, inetAddress, serverport);
socket.send(packet)
服务器代码:
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
socket.receive(packet);
我正在开发一个应用程序,该应用程序应连接到开放的WiFi接入点,并与也连接到此接入点的设备交换消息.让我们假设接入点是开放的,没有任何限制.是否可以请求与其连接的设备的IP地址列表?然后,如果我们有地址,是否可以启动连接并与该设备交换消息?你见过类似的项目/应用吗?(是否可以在没有黑客攻击的情况下使用常规接入点?)
谢谢,任何片段/想法将受到高度赞赏!:)
我的服务器创建一个侦听UDP数据包的多播套接字.它正在接收发送到网络广播地址的数据包但我无法获取发送方的IP地址:
multisocket.getInetAddress().getHostAddress();
Run Code Online (Sandbox Code Playgroud)
回报
"::"
Run Code Online (Sandbox Code Playgroud)
(我猜它是因为null getInetAddress).
如何获取发件人的IP地址?
提示:我想这与套接字没有绑定有关,基本上是整个广播,因为那些数据包不是专门发送给我而是发送到整个网络,但它们不应该保留发送方的IP地址吗?请赐教.
这是代码:
public void run() {
try {
Thread.sleep(5000);
Log.i("SERVERUDP", "Connecting...");
MulticastSocket multisocket = new MulticastSocket(SERVERPORT);
multisocket.setBroadcast(true);
Log.i("SERVERUDP","Server's IP is: " + multisocket.getLocalAddress().getHostAddress());
getLocalIpAddress();
while(true){
byte[] b = new byte[65535];
ByteArrayInputStream b_in = new ByteArrayInputStream(b);
DatagramPacket dgram = new DatagramPacket(b, b.length);
multisocket.receive(dgram); // blocks
ObjectInputStream o_in = new ObjectInputStream(b_in);
Object o = o_in.readObject();
dgram.setLength(b.length);
b_in.reset();
if(o.getClass().getSimpleName().equalsIgnoreCase("Request")){
Request request = (Request)o;
String inetaddress = multisocket.getInetAddress().getHostAddress();
Log.i("SERVERUDP-if", "Sending request to IP: " + inetaddress);
new …Run Code Online (Sandbox Code Playgroud) 当我从netcat或我的客户端向我的UDP服务器发送UDP数据包时,我遇到了一些问题,该服务器监听广播UDP数据包.问题是我无法重新启动And的缓冲区socket.receive(packet);当你检查我的控制台输出时,你会看到数据包被发送或接收两次甚至更多次,最烦人的是当我发送一个更长的数据包时,下一个较小的一部分是前一部分!(控制台输出上的HERE标记了问题)我的客户端和服务器位于同一LAN上.
客户代码:
DatagramSocket socket = new DatagramSocket();
socket.setBroadcast(true);
byte[] buf = ("Hello from Client").getBytes();
byte[] buf2 = ("omg").getBytes();
DatagramPacket packet = new DatagramPacket(buf, buf.length, getBroadcastAddress(UDPConnection.context), Server.SERVERPORT);
DatagramPacket packet2 = new DatagramPacket(buf2, buf2.length, getBroadcastAddress(UDPConnection.context), Server.SERVERPORT);
Log.d("UDP", "C: Sending: '" + new String(buf) + "'");
socket.send(packet);
socket.send(packet2);
Run Code Online (Sandbox Code Playgroud)
服务器代码:
void run(){
MulticastSocket socket = new MulticastSocket(SERVERPORT);
socket.setBroadcast(true);
byte[] buf = new byte[1024];
DatagramPacket packet = new DatagramPacket(buf, buf.length);
while(true){
Log.d("UDP", "S: Receiving...");
socket.receive(packet);
//socket.setReceiveBufferSize(buf.length);
packet.setData(buf); …Run Code Online (Sandbox Code Playgroud) android ×5
java ×3
sockets ×3
bluetooth ×2
udp ×2
wifi ×2
access-point ×1
adhoc ×1
android-wifi ×1
connection ×1
datagram ×1
ip ×1
lan ×1
networking ×1
string ×1