Форум русскоязычного сообщества Ubuntu


Автор Тема: Кодировка в Ubuntu  (Прочитано 495 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Spicus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Кодировка в Ubuntu
« : 03 Декабрь 2011, 18:00:44 »
Ребята, как изменить кодировку сообщений отправляемых сокетами?

Оффлайн Sly_tom_cat

  • Don't worry, be happy!
  • Заслуженный пользователь
  • Старожил
  • *
  • Сообщений: 12090
  • Xubuntu 20.04
    • Просмотр профиля
    • Github
Re: Кодировка в Ubuntu
« Ответ #1 : 03 Декабрь 2011, 18:04:17 »
Какими именно сокетами и кто отправляет?
Индикатор для Yandex-Disk: https://forum.ubuntu.ru/index.php?topic=241992
UEFI-Boot - грузимся без загрузчика: https://help.ubuntu.ru/wiki/uefiboot

Оффлайн Spicus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Кодировка в Ubuntu
« Ответ #2 : 03 Декабрь 2011, 18:29:00 »
обычными TCP сокетами:
#include <netdb.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <iostream>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>             
#include <stdio.h>
#include <errno.h>
#include <unistd.h>             
#include <stdlib.h>

using namespace std;

int main(int argc, char *argv[])
{

int sock;
int send_s;
int recv_s;
struct sockaddr_in saddr;
struct hostent *host;

char message[] = "Hello there!\n";
char buf[sizeof(message)];
char in [1024];
char out [1024];

if(argc != 2)
        {
        cout << "НЕПРАВИЛЬНО!!! ТАК ПРАВИЛЬНО: a.out <IP адрес>" << endl;
        return 0;
    }
        if((host = gethostbyname(argv[1])) == NULL)
        {
                cout << "nslookup failed on '%s'\n" <<  argv[1] << endl;
return 0;
        }
        else
        {
                cout << "Соединение с " <<  argv[1] << endl;
        }


    sock = socket(PF_INET, SOCK_STREAM, 0);
    if(sock < 0)
    {
        cout << "Ошибка сокета" << endl;
return 0;
    }

    saddr.sin_family = AF_INET;
    saddr.sin_port = htons(6575); // или любой другой порт...
// saddr.sin_addr.s_addr = inet_aton("192.168.1.101");

    if(inet_aton(argv[1], &saddr.sin_addr) == 0)
        {
       cout << "Не правильный IP адрес" << endl;
        close(sock);
        return 0;
    }
    if(connect(sock, (struct sockaddr *)&saddr, sizeof(saddr)) < 0)
    {
cout << "Connect Error" << endl;
return 0;
}

//while (1)
//{
//recv_s = recv (sock, in, 1024, 0);
//if (recv_s == -1)
//{
//cout << "Ошибка приёма" << endl;
//return 0;
//}
//if (recv_s > 0)
//{
//cout << in;
//}

//cin >> out;
//send (sock, out, 1024, 0);
//free(out);
//free(in);
//}


system ("cp1251");
cout << message << endl;
    send(sock, message, sizeof(message), 0);
    recv(sock, buf, sizeof(message), 0);

cout << buf << endl;

close(sock);
return 0;
}
Отправляется на эхо сервер! Приходит обратно лабуда!!!
P.S. А на всех серверах, по всем протоколам одна кодировка используется?
« Последнее редактирование: 03 Декабрь 2011, 18:35:58 от Spicus »

PetrovSE

  • Гость
Re: Кодировка в Ubuntu
« Ответ #3 : 04 Декабрь 2011, 14:14:21 »
Сокеты про кодировку ничего не знают, они отправляют байты,
а как их интерпретировать это ваша забота.

Кодировка на сервере такая, какую там установил админ.

 

Страница сгенерирована за 0.085 секунд. Запросов: 25.