Посмотрите на эти небольшие базовые программы на Python:
import socket
tcpsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsock.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
tcpsock.bind(("", 10000))
tcpsock.listen(10)
(sock, (ip, port)) = tcpsock.accept()
s = sock.recv(1024)
print(s)
Вторая программа:
import socket
import time
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect(('localhost', 10000))
time.sleep(1)
sock.sendall(b'hello world')
Первая программа - это сокет-сервер. Он получает сообщение через сокет и отображает его на консоли. Вторая программа - это клиент, который подключается к серверу и отправляет ему сообщение.
Как видите, сервер читает сообщение максимальной длины 1024 байта. Мой клиент отправил несколько байтов. У меня такой вопрос: как сервер узнает, что сообщение заканчивается после символа 'd'?
Я работаю с сокетами годами и всегда внедрял механизм разделителя, чтобы знать, когда сообщение останавливается. Но, похоже, работает автоматически. Мой вопрос: как? Я знаю сообщения об фрагментах TCP-машины. Так что же произойдет, если в середине моего сообщения будет растерзан пакет? Это управляется ОС?
Спасибо