• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

iphone - 通过 Socket 发送文件 (iOS)

[复制链接]
菜鸟教程小白 发表于 2022-12-13 11:49:51 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

我创建了一个基于 Socket 的简单聊天应用。 邮报:Socket Based iPhone App帮助我创建了这个。

我现在想通过套接字发送/接收文件。 请指点我如何实现这一目标。

干杯, 呸呸呸

编辑:

用于连接套接字的代码是:

NSString *aHostName = @"xx.xx.xx.xx";
NSInteger aPort = 1234;

CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)aHostName, aPort, &readStream, &writeStream);

self.inputStream = (NSInputStream *)readStream;
self.outputStream = (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];

用于发送数据的代码是

NSData *aData = [[NSData alloc] initWithData:[iRequestAPI dataUsingEncoding:NSASCIIStringEncoding]];
[self.outputStream write:[aData bytes] maxLength:[aData length]];
[aData release];

其中,iRequestAPI 是必须发送的字符串。

现在当我尝试通过套接字发送文件时,考虑到我将文件转换为 NSData 并使用 [self.outputStream write:[aData bytes] maxLength:[aData length]]; 可以由于连接带宽的原因,有可能无法发送整个文件。 如果没有发送整个文件,如何确保发送其余文件。

这是通过套接字发送文件的正确方法吗? 请建议..



Best Answer-推荐答案


如果你的 NSData 足够大,你需要把它切成小块。你需要字节来传输它们。例如:

NSData *newData = UIImagePNGRepresentation([UIImage imageNamed"Default.png"]);
    int index = 0;
    int totalLen = [newData length];
    uint8_t buffer[1024];
    uint8_t *readBytes = (uint8_t *)[newData bytes];

    while (index < totalLen) {
        if ([outputStream hasSpaceAvailable]) {
            int indexLen =  (1024>(totalLen-index))?(totalLen-index):1024;

            (void)memcpy(buffer, readBytes, indexLen);

            int written = [outputStream write:buffer maxLength:indexLen];

            if (written < 0) {
                break;
            }

            index += written;

            readBytes += written;
        }
    }

关于iphone - 通过 Socket 发送文件 (iOS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9432327/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap