Я реализовал нечто похожее на то, что вы описываете с помощью сокетов TCP. Сокет - это поток необработанных байтов, после успешного установления соединения между двумя сторонами, сокет может отправлять или получать некоторые байты, нет никаких определенных логических правил для определения того, что вы отправляете или получаете, эти байты могут представлять что-либо, то есть вы должны определить свой протокол или структуру сообщений, которые вы отправляете и получаете в логике кода, чтобы в конце содержались содержательные сообщения.
Например, для простого протокола: если вы хотите отправить сообщение (это сообщение может быть строкой, целым числом или чем-то еще), вы отправляете четыре байта, представляющих целое число, которые определяют размер фактического сообщения (которое было сериализовано в байты ), затем вы отправляете фактические байты сообщения, на другом конце вы читаете четыре байта, которые, как вы знаете, представляют фактический размер сообщения, теперь вы знаете, что ожидаете определенного количества байтов, которое представляет полное сообщение, поэтому вы продолжаете читать байты до тех пор, пока все эти байты не получат правильное сообщение. После получения сообщения вы ждете еще четыре байта, которые представляют новый размер сообщения и т. Д.
Само сообщение может быть любым сериализуемым типом данных. Большинство языков программирования поддерживают сериализацию примитивных типов по умолчанию. Если вы хотите сериализовать пользовательский тип данных, одним из вариантов является кодирование вашего сообщения (которое, например, является экземпляром структуры, соответствующей протоколу Codable) с использованием Swift JSONEncoder, поэтому в на другом конце вы ожидаете байты JSON, которые затем можно декодировать обратно в исходный объект. Еще одним хорошим вариантом для сериализации структурированных данных является protobuf .
Вы можете взглянуть на этот класс , написанный на C #, это похожая реализация того, что я здесь описал, она немного другая, но вы поймете идею.
Примечание: порядок байтов по умолчанию (порядковый номер) может различаться в зависимости от платформы и языка программирования, он может быть как с прямым порядком байтов, так и с прямым порядком байтов.
CocoaAsyncSocket - хорошая библиотека для работы с сокетами в iOS.