为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

ios设备自动连接pc端

2018-04-13 14页 doc 35KB 21阅读

用户头像

is_014457

暂无简介

举报
ios设备自动连接pc端ios设备自动连接pc端 文章主要介绍在同一局域网内只知服务器端口,ios设备与pc端自动连接,本来打算通过udp广播的方式寻找响应的pc端,在pc端接收到响应后,返回数据给ios设备,而让ios设备知道服务器地址。但测试时后发现广播不成功,改为先获取本机ip,再遍历ip地址段内0-255之间的所有ip地址,udp发信息,寻找有返回响应的pc端,实现代码: 服务器端(java) import java.io.*; import java.net.*; class UDPServer{ public static v...
ios设备自动连接pc端
ios设备自动连接pc端 文章主要介绍在同一局域网内只知服务器端口,ios设备与pc端自动连接,本来打算通过udp广播的方式寻找响应的pc端,在pc端接收到响应后,返回数据给ios设备,而让ios设备知道服务器地址。但测试时后发现广播不成功,改为先获取本机ip,再遍历ip地址段内0-255之间的所有ip地址,udp发信息,寻找有返回响应的pc端,实现代码: 服务器端(java) import java.io.*; import java.net.*; class UDPServer{ public static void main(String[] args)throws IOException{ DatagramSocket server = new DatagramSocket(5050); byte[] recvBuf = new byte[100]; DatagramPacket recvPacket = new DatagramPacket(recvBuf , recvBuf.length); System.out.println("server 启动"); server.receive(recvPacket); String recvStr = new String(recvPacket.getData() , 0 , recvPacket.getLength()); System.out.println("接收到消息!" + recvStr); int port = recvPacket.getPort(); InetAddress addr = recvPacket.getAddress(); String sendStr = "Hello ! I'm Server"; byte[] sendBuf; sendBuf = sendStr.getBytes(); DatagramPacket sendPacket = new DatagramPacket(sendBuf , sendBuf.length , addr , port ); server.send(sendPacket); server.close(); } } ios端代码 先获取设备的ip(IPAddress代码来自网上) IPAddress.h #ifndef WhatsMyIP_IPAddress_h #define WhatsMyIP_IPAddress_h #endif #define MAXADDRS 32 extern char *if_names[MAXADDRS]; extern char *ip_names[MAXADDRS]; extern char *hw_addrs[MAXADDRS]; extern unsigned long ip_addrs[MAXADDRS]; void InitAddresses(); void FreeAddresses(); void GetIPAddresses(); void GetHWAddresses(); IPAdress.c #include #define MAXADDRS 32 extern char *if_names[MAXADDRS]; extern char *ip_names[MAXADDRS]; extern char *hw_addrs[MAXADDRS]; extern unsigned long ip_addrs[MAXADDRS]; void InitAddresses(); void FreeAddresses(); void GetIPAddresses(); void GetHWAddresses(); #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define min(a,b) ((a) < (b) ? (a) : (b)) #define max(a,b) ((a) > (b) ? (a) : (b)) #define BUFFERSIZE 4000 char *if_names[MAXADDRS]; char *ip_names[MAXADDRS]; char *hw_addrs[MAXADDRS]; unsigned long ip_addrs[MAXADDRS]; static int nextAddr = 0; void InitAddresses() { int i; for (i=0; iifr_addr.sa_len); ptr += sizeof(ifr->ifr_name) + len; // for next one in buffer if (ifr->ifr_addr.sa_family != AF_INET) { continue; // ignore if not desired address family } if ((cptr = (char *)strchr(ifr->ifr_name, ':')) != NULL) { *cptr = 0; // replace colon will null } if (strncmp(lastname, ifr->ifr_name, IFNAMSIZ) == 0) { continue; /* already processed this interface */ } memcpy(lastname, ifr->ifr_name, IFNAMSIZ); ifrcopy = *ifr; ioctl(sockfd, SIOCGIFFLAGS, &ifrcopy); flags = ifrcopy.ifr_flags; if ((flags & IFF_UP) == 0) { continue; // ignore if interface not up } if_names[nextAddr] = (char *)malloc(strlen(ifr->ifr_name)+1); if (if_names[nextAddr] == NULL) { return; } strcpy(if_names[nextAddr], ifr->ifr_name); sin = (struct sockaddr_in *)&ifr->ifr_addr; strcpy(temp, inet_ntoa(sin->sin_addr)); ip_names[nextAddr] = (char *)malloc(strlen(temp)+1); if (ip_names[nextAddr] == NULL) { return; } strcpy(ip_names[nextAddr], temp); ip_addrs[nextAddr] = sin->sin_addr.s_addr; ++nextAddr; } close(sockfd); } void GetHWAddresses() { struct ifconf ifc; struct ifreq *ifr; int i, sockfd; char buffer[BUFFERSIZE], *cp, *cplim; char temp[80]; for (i=0; iifr_addr.sa_family == AF_LINK) { struct sockaddr_dl *sdl = (struct sockaddr_dl *)&ifr->ifr_addr; int a,b,c,d,e,f; int i; strcpy(temp, (char *)ether_ntoa(LLADDR(sdl))); sscanf(temp, "%x:%x:%x:%x:%x:%x", &a, &b, &c, &d, &e, &f); sprintf(temp, "%02X:%02X:%02X:%02X:%02X:%02X",a,b,c,d,e,f); for (i=0; iifr_name,if_names[i]) == 0)) { if (hw_addrs[i] == NULL) { hw_addrs[i] = (char *)malloc(strlen(temp)+1); strcpy(hw_addrs[i], temp); break; } } } } cp += sizeof(ifr->ifr_name) + max(sizeof(ifr->ifr_addr), ifr->ifr_addr.sa_len); } close(sockfd); } SocketViewController.h #import #import "AsyncUdpSocket.h" @interface SocketViewController : UIViewController { long tag; NSString *host; AsyncUdpSocket *udpSocket; } @property (weak, nonatomic) IBOutlet UITextField *sendField; @property (weak, nonatomic) IBOutlet UITextField *revField; @property (weak, nonatomic) IBOutlet UIButton *btn; - (IBAction)connect:(id)sender; @end SocketViewController #import "SocketViewController.h" #import "IPAddress.h" @interface SocketViewController () @end @implementation SocketViewController @synthesize revField; @synthesize sendField; - (void)viewDidLoad { [super viewDidLoad]; udpSocket = [[AsyncUdpSocket alloc] initWithDelegate:self]; NSError *error = nil; if (![udpSocket bindToPort:0 error:&error]) { NSLog(@"Error binding: %@", error); return; } [udpSocket receiveWithTimeout:-1 tag:0]; NSLog(@"Ready"); // Do any additional setup after loading the view, typically from a nib. } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } - (IBAction)connect:(id)sender { if(host == nil) { host = [self deviceIPAdress]; } NSRange range = [host rangeOfString:@"." options:NSBackwardsSearch]; NSLog(@"host=====%@", host); NSString *string2 = [host substringToIndex:range.location]; NSString *msg = [sendField text]; //@"====";// NSLog(@"msg=====%@", msg); for(int i = 0; i < 255; i++){ NSString *host2 = [[NSString alloc] initWithString:[NSString stringWithFormat:@"%@.%li",string2, i]]; if ([msg length] == 0) { NSLog(@"Message required"); return; } NSData *data = [msg dataUsingEncoding:NSUTF8StringEncoding]; [udpSocket sendData:data toHost:host2 port:5050 withTimeout:-1 tag:tag]; } // [self logMessage:FORMAT(@"SENT (%i): %@", (int)tag, msg)]; } - (void)onUdpSocket:(AsyncUdpSocket *)sock didSendDataWithTag:(long)tag { // You could add checks here } - (void)onUdpSocket:(AsyncUdpSocket *)sock didNotSendDataWithTag:(long)tag dueToError:(NSError *)error { // You could add checks here } - (BOOL)onUdpSocket:(AsyncUdpSocket *)sock didReceiveData:(NSData *)data withTag:(long)tag fromHost:(NSString *)host port:(UInt16)port1 { NSString *msg = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding]; if (msg) { NSLog(@"RECV: %@", msg); [revField setText:msg]; } else { NSLog(@"RECV: Unknown message from: %@:%hu", host, port1); } [udpSocket receiveWithTimeout:-1 tag:0]; return YES; } //得到本机IP -(NSString *) deviceIPAdress { InitAddresses(); GetIPAddresses(); GetHWAddresses(); return [NSString stringWithFormat:@"%s",ip_names[1]]; } @end
/
本文档为【ios设备自动连接pc端】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索