проблема с взаимодействием Python и C#
По сети только байты летают (TCP socket—это просто поток байтов). Убедитесь, что вы все байты послали/получили:
socket.send(bytes) не обязан все байты из bytes послать. Можно использовать socket.sendall() вместо этого, который либо все данные посылает, либо завершается с ошибкой—ключевое отличие от socket.send(), то что нет возможности узнать сколько байт было успешно послано до ошибки.
socker.recv(bufsize) возвращает самое большее bufsize байт—может меньше вернуть.
Возможно вам лучше библиотекой более высокого уровня воспользоваться, к примеру requests и посылать серверу http-запросы с данными в JSON формате:
>>> import json
>>> json.dumps((12, 4, 0))
'[12, 4, 0]'
>>> import requests
>>> r = requests.post('http://httpbin.org/post', json={"data": (12, 4, 0)})
>>> r.json() # response
{'args': {},
'data': '{"data": [12, 4, 0]}',
'files': {},
'form': {},
'headers': {'Accept': '*/*',
'Accept-Encoding': 'gzip, deflate',
'Content-Length': '20',
...
Для 4-ки у вас неверный порядок байт: сервер посылает big-endian (от старшего к младшему) как это принято в сети, а на клиенте вы используете родной для машины порядок байт, который у вас little-endian (от младшего к старшему порядок байтов внутри числа). Пример (Питон 3):
>>> int.from_bytes(4 .to_bytes(4, 'big'), 'little')
67108864
Следует зафиксировать порядок байт, используемых в вашем протоколе обмена между клиентом и сервером:
>>> import struct
>>> struct.pack('>i', 4)
b'\x00\x00\x00\x04'
>>> struct.pack('<i', 4)
b'\x04\x00\x00\x00'
Следует зафиксировать размер числа: снова по умолчанию используется родной для платформы размер (что C компилятор бы использовал), например 32 vs. 64-bit.
Убедитесь, что вы не пытаетесь послать число со знаком, как число без знака:
>>> int.from_bytes((-1).to_bytes(4, 'little', signed=True), 'big', signed=False)
4294967295
Также при посылке составных объектов могут добавляться padding между элементами структуры, если вы используете родной формат платформы (по умолчанию или с явным индикатором формата '@'). Если использовать явно: '!', '<', '>' форматы, то нет padding.
Если вы бы использовали '!iii' формат, то гарантировано вне зависимости от машины, на который вы этот код запустили, что порядок байтов big-endian, размер каждого числа 4 байта, каждое число со знаком и нет padding—см. описание форматов в struct документации:
>>> struct.pack('!iii', 12, 4, 0)
b'\x00\x00\x00\x0c\x00\x00\x00\x04\x00\x00\x00\x00'
>>> _.hex()
'0000000c0000000400000000'
Убедитесь, что С# именно эти байты посылает. Связанный вопрос: Запись в файл. fwrite() fread();