【问题标题】:How to send a well-formed HTTP response in Cocoa sockets?如何在 Cocoa 套接字中发送格式正确的 HTTP 响应?
【发布时间】:2011-11-12 19:28:43
【问题描述】:

我正在制作一个包含内置 HTTP 服务器的应用程序。我需要通过套接字发送一个 PNG 图像,但不知何故它变得一团糟,图像就没有显示出来。这是我的代码(我正在使用 AsyncSockets):

if(processingURL == FALSE) {

        NSString *filePath = [[NSString alloc] initWithFormat:@"%@/Contents/Resources/public%@",[self getApplicationPath], [request objectAtIndex:1]];
        //NSLog(@"%@", filePath);


        if([[NSFileManager defaultManager] fileExistsAtPath:filePath]) {
            contententType = @"image/png";
            responseCode = @"200 OK";
         //   responseBody = [[NSString alloc] initWithData:[[NSFileManager defaultManager] contentsAtPath:filePath] encoding:NSASCIIStringEncoding];

            NSData * content = [[NSData alloc] initWithContentsOfFile:filePath];

            responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding];

            NSLog(@"%@",responseBody);

        }
    }

    data = [[NSString stringWithFormat:@"HTTP/1.1 %@\nContent-Type: %@\n\n\n %@", responseCode, contententType, responseBody] dataUsingEncoding:NSUTF8StringEncoding];


    [sock writeData:data withTimeout:-1 tag:0];

我做错了什么?我认为问题在于响应格式错误,但我不知道,谢谢:)

【问题讨论】:

  • 你应该向你的包询问图像的路径或 URL,而不是使用字符串连接方法或 stringWithFormat: 将部分路径装订在一起。
  • 此外,在生成输出时,您似乎假设您有一个“contententType”和responseBody,无论您是否实际找到并读取了文件并因此分配了它们。
  • 嗨彼得霍西。我在该代码之前默认设置了我的正文和标题,以防万一发生故障。我现在也知道我必须将图像作为二进制数据发送,谢谢

标签: macos cocoa sockets cocoaasyncsocket


【解决方案1】:
responseBody = [[NSString alloc] initWithData:content encoding:NSASCIIStringEncoding];

不要将任意文件内容数据视为文本。不是。

PNG 不是 ASCII 文本文件;它包含您必须如此对待的二进制数据。这意味着始终使用 NSData,而不是在任何时候尝试将其转换为或解释为 NSString 的文本。

您应该创建的唯一字符串是响应代码和标头。从该字符串生成数据,然后将文件中的数据连接到该字符串上并将其发送到服务器。

【讨论】:

  • 我爱你,@Peter Hosey……你显然什么都知道(我想知道的),但你和其他聪明人一样,老太太,你喜欢让他们猜测,哈哈。 . 在你的帖子结束时,我总是发现自己在我的座位边缘......然后你就像做这个,那个和其他的事情......A.k.a.我想知道的是什么。在这种情况下,“从该字符串生成数据,然后将文件中的数据连接到它上并将其发送到服务器。”,大声笑。我只是破坏你的印章 - 我总是感谢你回复更详细的回复。干杯。
猜你喜欢
  • 2012-04-24
  • 2018-07-07
  • 2022-08-16
  • 2017-05-29
  • 1970-01-01
  • 2021-09-03
  • 2011-07-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多