Tôi chỉ mới bắt đầu với lập trình socket trên iOS và tôi đang cố gắng xác định việc sử dụng sự kiện NSStreamEventHasSpaceAvailable
cho NSOutputStreams
.Cách chính xác để gửi dữ liệu qua ổ cắm với NSOutputStream
Một mặt, Apple's official documentation (Listing 2) cho thấy rằng trong phương pháp -stream:handleEvent:
đại biểu, dữ liệu cần được ghi vào bộ đệm đầu ra với -write:maxLength:
tin nhắn, thông qua dữ liệu liên tục từ một bộ đệm, bất cứ khi nào sự kiện NSStreamEventHasSpaceAvailable
nhận được.
Mặt khác, this tutorial from Ray Wenderlich và this iOS TCP socket example on GitHub bỏ qua sự kiện NSStreamEventHasSpaceAvailable
hoàn toàn, và chỉ cần đi trước và -write:maxLength:
vào bộ đệm bất cứ khi nào họ cần (thậm chí phớt lờ -hasSpaceAvailable
).
Thứ ba, có this example code mà dường như làm cả ...
Câu hỏi của tôi do đó, cách chính xác (s) để xử lý ghi dữ liệu vào một NSOutputStream
được gắn vào một ổ cắm là gì? Và những gì sử dụng là mã sự kiện NSStreamEventHasSpaceAvailable
nếu nó có thể (rõ ràng) bị bỏ qua? Dường như với tôi rằng có một hoặc rất may mắn UB xảy ra (trong ví dụ 2 và 3), hoặc có một số cách để gửi dữ liệu thông qua một socket dựa trên NSOutputStream
...
Cảm ơn vì sự hiểu biết, con thiêu thân , có vẻ như tôi đã có cùng một mức độ lẫn lộn như bạn. Cảm ơn một lần nữa! – Patricia
lưu ý rằng byteWritten có thể âm, cho biết lỗi, trong trường hợp có lỗi, mã trên sẽ bị kẹt, vì currentDataOffset không khớp ... chỉnh sửa được đề xuất –
Bạn có thể giúp tôi hiểu cách người nhận biết liệu nó có nhận được một lỗi khác không toàn bộ dữ liệu hoặc dữ liệu? Có lẽ bộ đệm của tôi có dung lượng 2 byte và tôi chỉ có thể viết hai ký tự ASCII cùng một lúc. Làm thế nào người nhận cho biết nếu tôi gửi "làm" hoặc "dope" từ với nó? –