[英]Objective c - Writing image file to ip address
專家點評:
我整個上午都在研究如何通過IP地址將圖像文件寫入另一台計算機。 我真的需要創建套接字,設置委托,安排運行循環,檢查可用空間以及所有這些嗎? 真? 我不能僅使用IP地址和默認端口將文件保存到URL嗎?
我問這個問題是因為我自己並沒有取得太大進步,而且我知道點擊“發布您的問題”的那一刻,我會找到一些有用的信息。 但是,如果沒有發生,請回復。 任何幫助表示贊賞。
這是我的代碼,我想我走錯了路:
#import "TESTtcpController.h"
@interface TESTtcpController()
@property (nonatomic, strong)NSInputStream *inputStream;
@property (nonatomic, strong)NSOutputStream *outputStream;
//void CFStreamCreatePairWithSocketToHost (
// CFAllocatorRef alloc,
// CFStringRef host,
// UInt32 port,
// CFReadStreamRef *readStream,
// CFWriteStreamRef *writeStream
// );
@end
@implementation TESTtcpController
+ (void)sendFile:(UIImage *)image
{
UInt32 port = 80;
NSString *ipAddress = @"10.10.10.10";
TESTtcpController *tcpController = [[TESTtcpController alloc] init];
[tcpController connect:port ipAddress:ipAddress];
[tcpController postFile:image];
[tcpController disconnect];
tcpController = nil;
}
-(void)connect:(UInt32)port ipAddress:(NSString *)ipAddress
{
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (__bridge CFStringRef)ipAddress, port, &readStream, &writeStream);
self.inputStream = (__bridge NSInputStream *)readStream;
self.outputStream = (__bridge NSOutputStream *)writeStream;
[self.inputStream setDelegate:self];
[self.outputStream setDelegate:self];
[self.inputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.outputStream scheduleInRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
[self.inputStream open];
[self.outputStream open];
NSLog(@"input stream id %@", self.inputStream);
/* Store a reference to the input and output streams so that
they don't go away.... */
}
- (void)postFile:(UIImage *)image
{
}
- (void)dataSending:(NSString*)data {
if(self.outputStream) {
if(![self.outputStream hasSpaceAvailable])
return;
NSData *_data=[data dataUsingEncoding:NSUTF8StringEncoding]; int data_len = [_data length];
uint8_t *readBytes = (uint8_t *)[_data bytes];
int byteIndex=0;
unsigned int len=0;
while (TRUE) {
len = ((data_len - byteIndex >= 40960) ? 40960 : (data_len-byteIndex));
if(len==0)
break;
uint8_t buf[len]; (void)memcpy(buf, readBytes, len);
len = [self.outputStream write:(const uint8_t *)buf maxLength:len]; byteIndex += len;
readBytes += len; }
}
}
- (void)stream:(NSStream *)stream handleEvent:(NSStreamEvent)eventCode
{
switch(eventCode) {
case NSStreamEventNone:
break;
case NSStreamEventOpenCompleted:
break;
case NSStreamEventHasBytesAvailable:
break;
case NSStreamEventHasSpaceAvailable:
// {
// uint8_t *readBytes = (uint8_t *)[_data mutableBytes];
// readBytes += byteIndex; // instance variable to move pointer
// int data_len = [_data length];
// unsigned int len = ((data_len - byteIndex >= 1024) ?
// 1024 : (data_len-byteIndex));
// uint8_t buf[len];
// (void)memcpy(buf, readBytes, len);
// len = [stream write:(const uint8_t *)buf maxLength:len];
// byteIndex += len;
// break;
// }
case NSStreamEventErrorOccurred:
break;
case NSStreamEventEndEncountered:
break;
// continued ...
}
}
-(void)disconnect{
NSLog(@"disconnect method called");
NSStreamStatus socketStatus = [self.outputStream streamStatus];
int status = socketStatus;
NSLog(@"Stream Status is %i", status);
if (status == 2) {
[self.inputStream close];
[self.outputStream close];
NSLog(@"Socket Closed");
}
}
- (void)deallocMe
{
[TESTtcpController dealloc];
}
@end
您應該使用AFNetworking庫。 圖片上傳非常簡單。 在此處閱讀有關AFNetworking的信息: http ://cocoadocs.org/docsets/AFNetworking/2.0.0/
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration];
AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:configuration];
NSURL *URL = [NSURL URLWithString:@"http://example.com/upload"];
NSURLRequest *request = [NSURLRequest requestWithURL:URL];
NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"];
NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromFile:filePath progress:nil completionHandler:^(NSURLResponse *response, id responseObject, NSError *error) {
if (error) {
NSLog(@"Error: %@", error);
} else {
NSLog(@"Success: %@ %@", response, responseObject);
}
}];
[uploadTask resume];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.