Клиент и сервер общаются между собой так называемыми пакетами. Клиент посылает какую-то информацию, сервер ожидает ее в определенном виде (и наоборот). Если же структура отличается от ожидаемой - возникают подобные ошибки. Решением будет либо использовать подходящий клиент, либо использовать подходящий сервер (грубо говоря). Т.е. структура отправляемых и ожидаемых данных должна полностью совпадать.
По поводу опкодов - это что-то вроде идентификатора пакета, чтобы понимать, какого-то рода информация пришла в пакете. Разработчики часто смещают пакеты на несколько позиций, чтобы запихнуть туда, к примеру, похожий по смыслу новый пакет (или часто просто по приколу).
Это если вкратце.