При попытке перейти на сокет на основе Python у меня есть 2 вопроса, которые я не могу решить.Пожалуйста, помогите мне.Вот мой пример кода сокета:
import socket
import threading
import chardet
bind_ip = '0.0.0.0'
bind_port = 9999
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind((bind_ip, bind_port))
server.listen(1) # max backlog of connections
print (('Listening on {}:{}').format(bind_ip, bind_port))
def handle_client_connection(client_socket):
request = client_socket.recv(4096 )
result = chardet.detect(request)
print(result)
print (request.decode(result['encoding']))
client_socket.send('ACK!'.encode(result['encoding']))
client_socket.close()
while True:
client_sock, address = server.accept()
print (('Accepted connection from {}:{}').format(address[0], address[1]))
client_handler = threading.Thread(
target=handle_client_connection,
args=(client_sock,) # without comma you'd get a... TypeError: handle_client_connection() argument after * must be a sequence, not _socketobject
)
client_handler.start()
Выше приведен сервер, а ниже клиент:
import socket
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(('127.0.0.1', 9999))
client.send(str('test data').encode("utf-16"))
response = client.recv(4096)
print(response.decode("utf-16"))
Теперь вопросы:
1) Что означает число в этом утверждении: client.recv(4096)
?Что такое 4096
, это бит или байт килобайта для получения данных?2) Могу ли я получать бесконечный поток данных через сокет?Это означает, что, поскольку это утверждение client.recv(4096)
, каким бы ни было значение 4096, может быть байтом, сокет получит только 4096 байтов данных.У меня нет контроля над размером данных, получаемых через сокет, поэтому я могу обобщить его, чтобы он принимал данные любого размера через сокет?
Пожалуйста, помогите мне получить ответы на вышеупомянутые запросы.Я попробовал документацию по python для сокетов, но не нашел много.Я думаю, я что-то пропустил.Пожалуйста, помогите мне пройти через это.