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端自动连接,本来打算通过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,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。