标签:
一个远程获取iOS设备屏幕的例子,Client采用TCP连接iOS设备的2115端口,然后读取PNG格式的数据流。+client.php client示例文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
|
#import
<QuartzCore/QuartzCore.h> #import
<sys/socket.h> #import
<netinet/in.h> #import
<arpa/inet.h> #import
<pthread.h> CFSocketRef
_socket; void *
serverThread( void *
context); int
setupSocket( void ); void
acceptCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address,
const
void
*data, void
*info); void
sendScreenShots(CFWriteStreamRef oStream); void
sendScreenShots(CFWriteStreamRef oStream) { CGSize
screenSize = [[UIScreen mainScreen] bounds].size; UIGraphicsBeginImageContextWithOptions(screenSize,
YES, 0); CGContextRef
context = UIGraphicsGetCurrentContext(); UIWindow
* window = [[UIApplication sharedApplication] keyWindow]; CGContextSaveGState(context); CGContextTranslateCTM(context,
[window center].x, [window center].y); CGContextConcatCTM(context,
[window transform]); CGContextTranslateCTM(context,
-[window bounds].size.width*[[window layer] anchorPoint].x, -[window bounds].size.height*[[window layer] anchorPoint].y); [[window
layer] renderInContext:context]; CGContextRestoreGState(context); UIImage
*image = UIGraphicsGetImageFromCurrentImageContext(); NSData*
imageData = UIImagePNGRepresentation(image); NSUInteger
offset = 0; NSUInteger
buff_size = 1024; while (imageData.length>offset){ NSUInteger
buff_len = imageData.length - offset > buff_size ? buff_size : imageData.length - offset; CFWriteStreamWrite(oStream,
imageData.bytes+offset, buff_len); offset
= offset + buff_len; } UIGraphicsEndImageContext(); } void
acceptCallBack(CFSocketRef socket, CFSocketCallBackType type, CFDataRef address,
const
void
*data, void
*info) { if
(kCFSocketAcceptCallBack == type) { CFSocketNativeHandle
nativeSocketHandle = *(CFSocketNativeHandle *)data; uint8_t
name[SOCK_MAXADDRLEN]; socklen_t
nameLen = sizeof (name); if
(0 != getpeername(nativeSocketHandle, ( struct
sockaddr *)name, &nameLen)) { close(nativeSocketHandle); } //NSLog(@"%s
connected.", inet_ntoa( ((struct sockaddr_in *)name)->sin_addr )); CFWriteStreamRef
oStream; CFStreamCreatePairWithSocket(kCFAllocatorDefault,
nativeSocketHandle, NULL, &oStream); if
(oStream) { CFWriteStreamOpen(oStream); sendScreenShots(oStream); CFWriteStreamClose(oStream); close(nativeSocketHandle); }
else
{ close(nativeSocketHandle); } } } int
setupSocket() { _socket
= CFSocketCreate(kCFAllocatorDefault, PF_INET, SOCK_STREAM, IPPROTO_TCP, kCFSocketAcceptCallBack, acceptCallBack, NULL); if
(NULL == _socket) { return
0; } int
optVal = 1; setsockopt(CFSocketGetNative(_socket),
SOL_SOCKET, SO_REUSEADDR, ( void
*)&optVal, sizeof (optVal)); struct
sockaddr_in addr4; memset (&addr4,
0, sizeof (addr4)); addr4.sin_len
= (__uint8_t) sizeof (addr4); addr4.sin_family
= AF_INET; addr4.sin_port
= htons(2115); addr4.sin_addr.s_addr
= htonl(INADDR_ANY); CFDataRef
address = CFDataCreate(kCFAllocatorDefault, (UInt8 *)&addr4, sizeof (addr4)); if
(kCFSocketSuccess != CFSocketSetAddress(_socket, address)) { if
(_socket) CFRelease(_socket); _socket
= NULL; return
0; } CFRunLoopRef
cfRunLoop = CFRunLoopGetCurrent(); CFRunLoopSourceRef
source = CFSocketCreateRunLoopSource(kCFAllocatorDefault, _socket, 0); CFRunLoopAddSource(cfRunLoop,
source, kCFRunLoopCommonModes); CFRelease(source); return
1; } void *
serverThread( void *
context) { @autoreleasepool
{ int
res = setupSocket(); if
(!res) { return
0; } CFRunLoopRun(); return
( void *)1; } } int
startScreenServer() { pthread_t
tid; return
pthread_create(&tid, NULL, serverThread, NULL); } |
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
|
<?php Header( "Content-type:
image/png" ); function
receiveScreenShots(){ //$srv_ip
= ‘localhost‘; $srv_ip
= ‘192.168.36.36‘ ; $srv_port
= 2115; $fp
= ‘‘ ; $resp_str
= ‘‘ ; $errno
= 0; $errstr
= ‘‘ ; $timeout
= 10; $fp
= fsockopen ( $srv_ip , $srv_port , $errno , $errstr , $timeout ); while (! feof ( $fp )){ $resp_str
.= fgets ( $fp ,512); } fclose( $fp ); return
$resp_str ; } echo
receiveScreenShots(); ?> |
标签:
原文地址:http://blog.csdn.net/u014311077/article/details/42649525