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


Увидели сообщение с непонятной ссылкой, спам, непристойность или оскорбление?
Воспользуйтесь ссылкой «Сообщить модератору» рядом с сообщением!

Автор Тема: Сокеты в Ubuntu  (Прочитано 1434 раз)

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

Оффлайн Spicus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Сокеты в Ubuntu
« : 30 Ноября 2011, 16:42:10 »
Здравствуйте, написал сервер и клиент! Эхо сервер! Но данные на клиет от сервера приходят "ироглифами" Как быть?
клиетн:
#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;

    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);
//}

    send(sock, message, sizeof(message), 0);
    recv(sock, buf, sizeof(message), 0);

cout << buf << endl;

close(sock);
return 0;
}


сервер:

#include <sys/types.h>
#include <sys/socket.h>
#include <iostream>
#include <netinet/in.h>
using namespace std;

int main (void)
{

        int sock;
        int send_s;
        int recv_s;

        char buf[1024];
        int bytes_read;
        char in [1024];
        char out [1024];
        char hello[] = "hello client!";


        struct sockaddr_in saddr;

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 = htonl (INADDR_ANY);

if (bind (sock, (struct sockaddr*)&saddr, sizeof(saddr)) < 0)
{
cout << "Bind" << endl;
return 0;
}

if (listen (sock, 5) == -1)
{
cout << "Listen" << endl;
}


if (accept (sock, NULL, NULL) == -1)
{
cout << "Accept" << endl;
return 0;
}
        while(1)
        {
            bytes_read = recv(sock, buf, 1024, 0);
            if(bytes_read <= 0) break;
            send(sock, buf, bytes_read, 0);
        }

close(sock);
}



Оффлайн lewka_soad

  • Новичок
  • *
  • Сообщений: 8
    • Просмотр профиля
Re: Сокеты в Ubuntu
« Ответ #1 : 30 Ноября 2011, 18:03:15 »
Все дело в кириллице и в дефолтной кодировке, которая у вас используется.

Оффлайн Spicus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сокеты в Ubuntu
« Ответ #2 : 30 Ноября 2011, 20:00:32 »
Я подозривал что дело в ней!!! А что надо делать? как её изменить?

Оффлайн alecsartania

  • Старожил
  • *
  • Сообщений: 1564
  • УМка.
    • Просмотр профиля
Re: Сокеты в Ubuntu
« Ответ #3 : 01 Декабря 2011, 12:49:44 »
Я подозривал что дело в ней!!! А что надо делать? как её изменить?
надо чтобы везде был unicod.
Дома Linux Mint 20.1 / 20.02

Оффлайн Spicus

  • Автор темы
  • Новичок
  • *
  • Сообщений: 17
    • Просмотр профиля
Re: Сокеты в Ubuntu
« Ответ #4 : 02 Декабря 2011, 01:31:21 »
А как его поставить?

 

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