Форум программистов, компьютерный форум, киберфорум
PHP: сети
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
3 / 2 / 0
Регистрация: 17.07.2015
Сообщений: 53

Как передать кирилицу через сокет?

07.08.2017, 02:55. Показов 1836. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Такой вопрос, есть такой вот код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
$name = "кирилица";
 
    $json = "{\"playername\":\"$name\"}";
    
    $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
    if ($socket < 0)
    {   $result = "Send failed, internal error";    }
    else
    {   $result = socket_connect($socket, $notifyip, $notifyport);
        if ($result < 0)
        {   $result = "Sending failed, unable to connect to the server";    }
        else 
        {   $code = 12345;
            $len = strlen($json) + 4;
            $in = pack("v*", $code, $len);
            $in .= $json;
            socket_write($socket, $in, $len);
        }   socket_close($socket);
    }
?>
Если в $name значение состоит из русских букв то в сокет ничего не приходит... просто пусто... если из английских букв то все норм приходит то что написано. Подскажите плз как сделать, чтобы значения на русском языке тоже приходили. заранее спс.
1
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
07.08.2017, 02:55
Ответы с готовыми решениями:

Как передать массив через сокет?
Подскажите пожалуйста. Нужно реализовать игру крестики нолики, клиент-сервер. Здесь я могу передать переменную message типа string, а...

Как передать строку через сокет?
Передаю строку через сокеты. Если запускать сервер и клиент на одном компе , передает всё нормально , если запускать сервер и клиент на...

Как передать массив через сокет?
Подскажите как передать массив через сокет? Часть кода: byte sdata = null; sdata = Encoding.ASCII.GetBytes(str); ...

3
Эксперт PHP
5755 / 4134 / 1508
Регистрация: 06.01.2011
Сообщений: 11,276
07.08.2017, 09:28
Попробуйте так создавать JSON:
PHP
1
2
3
$data = ["playername" => "кирилица"];
 
$json = json_encode($data);
0
3 / 2 / 0
Регистрация: 17.07.2015
Сообщений: 53
07.08.2017, 12:19  [ТС]
изначально так и было, однако тогда в значении $json пусто уже после
PHP
1
$json = json_encode($data);
PHP
1
$json = "{"playername":"$name"}";
это то что получается после
PHP
1
$json = json_encode($data);
когда в переменной $name англ буквы. Когда же там русские, в $json пусто. Я заменил
PHP
1
json_encode($data);
этой фигней
PHP
1
$json = "{"playername":"$name"}";
типа сразу готовым выражением где уже стоит имя, тогда в $json получается то что надо с русскими буквами, но через сам сокет оно все равно не передается... мб как то надо сокету указывать кодировку, или в настройках сервера... не могу найти где и как, потому прошу помощи.

Добавлено через 1 час 6 минут
Перерыл кучу всего... ничего не смог найти...
Вроде в яве можно задавать кодировку для сокета, типа
JavaScript
1
2
PrintWriter out = new PrintWriter(new BufferedWriter(
new OutputStreamWriter(socket.getOutputStream(), Charset.forName("UTF-8"))),
но я в яве не шарю вообще, если кто шарит, как перевести мой кусок кода с пхп в яву, помогите плз.
0
1943 / 1768 / 825
Регистрация: 23.01.2014
Сообщений: 6,230
11.08.2017, 09:24
Цитата Сообщение от Enamy Посмотреть сообщение
Как передать кирилицу через сокет?
Также как и все остальное.

У TCP-протокола нету понятия "кодировка". Он вообще не знает что это такое. Он работает с байтами. 1 байт это число от 0 до 25510, какая бы кодировка ни была. Просто в одной кодировке русская буква "а" займет 1 байт (например windows-1251), в другой - 2 байта (например utf-8) ну и так далее. Но для протокола это все не важно.
Цитата Сообщение от Enamy Посмотреть сообщение
мб как то надо сокету указывать кодировку
Нет.
Цитата Сообщение от Enamy Посмотреть сообщение
или в настройках сервера
Нет.

Тут вопрос в том - как именно Вы принимаете этот пакет с кириллицей и как отображаете.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.08.2017, 09:24
Помогаю со студенческими работами здесь

Как передать файл через сокет
здравствуйте! Выполнил сериализацию данных в файл. Теперь нужно этот файл передать серверной части программы. Для выбора файла...

Как через сокет передать массив int от клиента, и распарсить его на сервере?
Подскажите пожалуйста, как через сокет передать массив int от клиента и распарсить его на сервере? Клиент: int size_array; // длинна...

Передать файл через сокет
как качественно огранизовать передачу файла через нонблокинг сокет серверу? помогите пжл с примером маленьким..

Не выходит передать XML через сокет
Всем доброго времени суток, очень нужна помощь, бьюсь уже не первый день: Передаю XML файл через сокет, всего около 20835 байт. Но...

Передать копию экрана через сокет
нужно передать изображение с экрана через соккет, тоесть преобразовать его в строку, уже измучался... помогите


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит токи на L и напряжения на C в установ. режимах до и. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru