gpt4 book ai didi

macos - 如何在 Cocoa 套接字中发送格式良好的 HTTP 响应?

转载 作者:行者123 更新时间:2023-12-03 17:15:28 25 4
gpt4 key购买 nike

我正在制作一个包含内置 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];

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

最佳答案

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

不要将任意文件内容数据视为文本。事实并非如此。

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

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

关于macos - 如何在 Cocoa 套接字中发送格式良好的 HTTP 响应?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8106975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com