Android搭載端末でホットスポット/無線LANダイレクトを作成しました。このWi-FiをiOSデバイスと接続します。 これでWi-Fi経由でデータを送受信できるiOSアプリケーションを作成したいと考えています。 はいの場合、どうすればいいですか?無線LANでのデータ転送
答えて
はい、それは可能です、あなたは、Android上でローカルサーバーを実行することができ、私はhttps://github.com/NanoHttpd/nanohttpd をお勧めします、あなたはhttpリクエストを行うにはiOSデバイス上でIPアドレスを取得する必要があり、ルートのIPアドレス
#include "IpHelper.h" // my header file
#include <stdio.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <sys/sysctl.h>
#include <net/if.h>
#include <string.h>
#include <arpa/inet.h>
#if TARGET_IPHONE_SIMULATOR
#include <net/route.h>
#else
#include "route.h"
#endif
#define CTL_NET 4 /* network, see socket.h */
#if defined(BSD) || defined(__APPLE__)
#define ROUNDUP(a) \
((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
int getdefaultgateway(in_addr_t * addr)
{
int mib[] = {CTL_NET, PF_ROUTE, 0, AF_INET,
NET_RT_FLAGS, RTF_GATEWAY};
size_t l;
char * buf, * p;
struct rt_msghdr * rt;
struct sockaddr * sa;
struct sockaddr * sa_tab[RTAX_MAX];
int i;
int r = -1;
if(sysctl(mib, sizeof(mib)/sizeof(int), 0, &l, 0, 0) < 0) {
return -1;
}
if(l>0) {
buf = malloc(l);
if(sysctl(mib, sizeof(mib)/sizeof(int), buf, &l, 0, 0) < 0) {
return -1;
}
for(p=buf; p<buf+l; p+=rt->rtm_msglen) {
rt = (struct rt_msghdr *)p;
sa = (struct sockaddr *)(rt + 1);
for(i=0; i<RTAX_MAX; i++) {
if(rt->rtm_addrs & (1 << i)) {
sa_tab[i] = sa;
sa = (struct sockaddr *)((char *)sa + ROUNDUP(sa->sa_len));
} else {
sa_tab[i] = NULL;
}
}
if(((rt->rtm_addrs & (RTA_DST|RTA_GATEWAY)) == (RTA_DST|RTA_GATEWAY))
&& sa_tab[RTAX_DST]->sa_family == AF_INET
&& sa_tab[RTAX_GATEWAY]->sa_family == AF_INET) {
if(((struct sockaddr_in *)sa_tab[RTAX_DST])->sin_addr.s_addr == 0) {
char ifName[128];
if_indextoname(rt->rtm_index,ifName);
if(strcmp("en0",ifName)==0){
*addr = ((struct sockaddr_in *)(sa_tab[RTAX_GATEWAY]))->sin_addr.s_addr;
r = 0;
}
}
}
}
free(buf);
}
return r;
}
#endif
を取得するためのCメソッドがあります
はまた、あなたはhttps://opensource.apple.com/source/xnu/xnu-1456.1.26/bsd/net/route.h
ここからリンゴのオープンソースからのダウンロードおよびインポートroute.hする必要があり、最後に、あなたは地元のHTTP URLをhttp://+'ip you get before'+ :'port of server you lunched on android'
ので、取得することができますこれでALamofire(またはその他)を介してローカルサーバーにHTTPリクエストを行う準備が整いました。
EDIT 1: 私はあなたがCocoaAsyncSocketとの間でデータ転送を行うことができます私の古いプロジェクトでこのコードを発見し、それが迅速3で書かれて、私は、あなたがにObjCに書かれたいくつかのコードを望んでいることを知っているが、そのような見つけることができません申し訳ありませんが、私は完全にあなたの質問に答えることはできません。
import CocoaAsyncSocket
import UIKit
enum TAG: Int {
case header = 1
case body = 2
}
class ViewController: UIViewController, NetServiceDelegate, NetServiceBrowserDelegate, GCDAsyncSocketDelegate {
var service : NetService!
var socket : GCDAsyncSocket!
var newSocket: GCDAsyncSocket!
var serviceBrowser = NetServiceBrowser()
var adresses: [Data]?
override func viewDidLoad() {
super.viewDidLoad()
startTalking()
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
func parseHeader(data: NSData) -> UInt {
var out: UInt = 0
data.getBytes(&out, length: MemoryLayout<UInt>.size)
return out
}
func handleResponseBody(data: NSData) {
if let message = NSString(data: data as Data, encoding: String.Encoding.utf8.rawValue) {
print(message)
}
}
func sendText() {
if let data = "aaaaa".data(using: String.Encoding.utf8) {
var header = data.count
let headerData = NSData(bytes: &header, length: MemoryLayout<UInt>.size)
self.socket.write(headerData as Data, withTimeout: -1.0, tag: TAG.header.rawValue)
self.socket.write(data, withTimeout: -1.0, tag: TAG.body.rawValue)
}
}
func startTalking() {
self.socket = GCDAsyncSocket(delegate: self, delegateQueue: DispatchQueue.main)
self.socket.isIPv4PreferredOverIPv6 = false
do {
try self.socket.connect(toHost: "localhost", onPort: UInt16(8080), withTimeout: -1)
} catch let err {
print(err)
}
}
/*
* Delegates of NSNetService
**/
func netServiceBrowser(_ browser: NetServiceBrowser, didFindDomain domainString: String, moreComing: Bool) {
print(111)
}
func netService(_ sender: NetService, didNotResolve errorDict: [String : NSNumber]) {
print("aaaaaaa")
}
func netServiceDidPublish(_ sender: NetService) {
print("Bonjour service published. domain: \(sender.domain), type: \(sender.type), name: \(sender.name), port: \(sender.port)")
}
func netService(_ sender: NetService, didNotPublish errorDict: [String : NSNumber]) {
print("Unable to create socket. domain: \(sender.domain), type: \(sender.type), name: \(sender.name), port: \(sender.port), Error \(errorDict)")
}
func netService(_ sender: NetService, didAcceptConnectionWith inputStream: InputStream, outputStream: OutputStream) {
print("4")
}
/*
* END OF Delegates
**/
/*
* Delegates of GCDAsyncSokcket
**/
func socketDidSecure(_ sock: GCDAsyncSocket) {
print("3")
}
func socket(_ sock: GCDAsyncSocket, didConnectToHost host: String, port: UInt16) {
print("connected")
self.socket.readData(toLength: UInt(MemoryLayout<UInt64>.size), withTimeout: -1, tag: 0)
}
func socket(_ sock: GCDAsyncSocket, didAcceptNewSocket newSocket: GCDAsyncSocket) {
print("Did accept new socket")
self.newSocket = newSocket
self.newSocket.readData(toLength: UInt(MemoryLayout<UInt64>.size), withTimeout: -1.0, tag: 0)
print("Connected to " + self.service.name)
}
func socketDidDisconnect(_ sock: GCDAsyncSocket, withError err: Error?) {
print("Socket disconnected: error \(err)")
if self.socket == socket {
// print("Disconnected from " + self.service.name)
}
}
func socket(_ sock: GCDAsyncSocket, didRead data: Data, withTag tag: Int) {
if data.count == MemoryLayout<UInt>.size {
let bodyLength: UInt = self.parseHeader(data: data as NSData)
sock.readData(toLength: bodyLength, withTimeout: -1, tag: TAG.body.rawValue)
} else {
self.handleResponseBody(data: data as NSData)
sock.readData(toLength: UInt(MemoryLayout<UInt>.size), withTimeout: -1, tag: TAG.header.rawValue)
}
}
func socket(_ sock: GCDAsyncSocket, didWriteDataWithTag tag: Int) {
print("Write data with tag of \(tag)")
}
func socket(_ sock: GCDAsyncSocket, didReceive trust: SecTrust, completionHandler: @escaping (Bool) -> Void) {
completionHandler(true)
}
/*
* END OF Delegates
**/
}
EDIT 2:// itunesの: ここに人間が読める文字列にIPを解析するためには、それ
+ (NSString *)getGatewayIP {
NSString *ipString = nil;
struct in_addr gatewayaddr;
int r = getdefaultgateway(&(gatewayaddr.s_addr));
if(r >= 0) {
ipString = [NSString stringWithFormat: @"%s",inet_ntoa(gatewayaddr)];
NSLog(@"default gateway : %@", ipString);
} else {
NSLog(@"getdefaultgateway() failed");
}
return ipString;
}
iOS(Objective-C)でTCP socket-clientのサンプルコードを提供してください。 –
ルータのIPを取得するために "IpHelper.h"を使用しましたが、正しいIPを返していません。 "29825196"が返されますが、IPは "172.24.199.1" –
"NSLog(@"% "、[NSString stringWithUTF8String:inet_ntoa((struct sockaddr_in *)(sa_tab [RTAX_GATEWAY]) - > sin_addr)]);" –
- 1. 無線LANホットスポット転送ファイル
- 2. iOSの無線LANで大きなファイルを転送する方法
- 3. 無線LAN経由でharwareモジュールからAndroidフォンに画像を転送する
- 4. キラーワイヤレス無線LANの切断
- 5. Windows Mobileの無線LANネットワークスリープ
- 6. 無線LANスキャン[email protected]は
- 7. アンドロイド:電話は無線LAN
- 8. 無線LANエンドポイントはハブですか?
- 9. GameKit無線ルータのないピアツーピア無線LAN?
- 10. Swift - 無線LANのセキュリティタイプを取得
- 11. アンドロイド:無線LANは、私は、バックグラウンドで私のプロジェクトでMMSを送信する
- 12. 無線LANメッセージングシステムについて
- 13. 無線LAN位置三角測量
- 14. CloudKit:無料のパブリックストレージとデータ転送
- 15. C#でWifi(無線)LAN接続を無視するC#
- 16. アプリケーション経由で無人機無線LANに接続
- 17. Javaを使用した有線/無線LANのIPアドレス
- 18. モバイルデータを受信したときに無線LAN(インターネットなし)でデータを送信する
- 19. ポート転送 - 有線の事
- 20. linuxでのioctlによるパッシブ無線LANのスキャン
- 21. コンパックの15-s004TXノートブックで無線LANの問題
- 22. 無線LANが自動的にプッシュ通知を送信する方法は?
- 23. LAN/WAN経由でのファイル転送速度のテスト
- 24. Pocket PCで無線LAN接続を検出する
- 25. 無線LANでJavaソケットを接続していますか?
- 26. LAN経由でストリングを転送するには?
- 27. UARTデータ転送
- 28. 転送データ
- 29. 転送データ
- 30. 転送データ
ためにObjC方法ですはい、(あなたが[Xender](HTTPSを考慮することができる可能です。 apple.com/in/app/xender-file-transfer-sharing/id898129576?mt=8)を例として説明しますが、ここで説明するには時間がかかりすぎます。あなたは同じもののためのいくつかのチュートリアルを見つける必要があります! – Lion
@Lionあなたはリンクや答えをつけることができますか?ありがとう – Jack
あなたのデバイスの1つは、サーバーでなければならず、もう1つはクライアントです。次に、方法を定義して、通信します。 –