Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Сети > Не принемаются данные


Автор: Rickert 21.2.2007, 09:58
Написал сервер простой:
Код

//=====================================================

#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include <stdio.h>

//=====================================================

int main()
{
    struct sockaddr_in addr;

    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(1200);
    addr.sin_addr.s_addr = INADDR_ANY;
    
    int sock = 0, c_sock = 0;

    sock = socket(PF_INET, SOCK_STREAM, 0);
    if (sock > 0)
        printf("Socket established...%d\n", socket);
    else
    {
        perror("Can't establishe socket - ");
        return 0;
    }
    if (bind(sock, (struct sockaddr*)&addr, sizeof(addr)) == 0 )
        printf("Socket was binded...\n");
    else
    {
        perror("Can't bind socket - ");
        return 0;
    }
    
    listen(sock, 5);

    while(1)
    {
        c_sock = accept(sock, NULL, NULL);

        if (c_sock > 0)
        {
            printf("Connection with client established. Trying to send data...\n");
            
            char buf[6] = {"There"};
            memset(buf, 0, 6);
            //write(c_sock, buf, strlen(buf));
            int len = send(sock, buf, sizeof(buf), 0);
            printf("Sended - %d", len);
            printf("Data has been sended without any checking\n Shuting down sockets and closing them...\n");
            shutdown(c_sock, 0);
            close(sock);
            break;
        }
    }

    return 0;
}

//=====================================================

И клиент к нему:
Код

//==================================================================

#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <stdio.h>

//==================================================================

int main()
{
    struct sockaddr_in addr;
    
    memset(&addr, 0, sizeof(addr));
    addr.sin_family = AF_INET;
    addr.sin_port = htons(1200);
    addr.sin_addr.s_addr = inet_addr("000.000.000.000");

    int sock = 0;

    sock = socket(PF_INET, SOCK_STREAM, 0);
    if (sock > 0)
        printf("Socket established...%d\n", socket);
    else
    {
        perror("Can't establishe socket - ");
        return 0;
    }
    connect(sock, (sockaddr*)&addr, sizeof(addr));
    
    char buf[6];
    
    memset(buf, 0, 6);
    //read(sock, buf, 5);
    recv(sock, buf, sizeof(buf), 0);
    printf("Recieved data: \"%s\"\n Shuting down the sockets and closing them...\n", buf);
    shutdown(sock, 0);
    close(sock);

    return 0;
}

//==================================================================


Такая ситуация: запускаю сервер, идёт ожидание, запускаю клиент - он выполняется, но данных не принемает. Смотрю что в консоле кидал сервер, в результате, не вижу сообщения "Data has been sended without any checking\n Shuting down sockets and closing them..." Следовательно, программа почему-то самозавершется на попытке отправки пакета. Что за маза?

Сижу под Альт Линуксом, работаю на бездисковом терминале через XDMCP

Нашёл ошибку, я посылал данные на сокет, а не сокет клиента.
Надо поменять 
Код

int len = send(sock, buf, sizeof(buf), 0);

На
Код

int len = send(c_sock, buf, sizeof(buf), 0);

Но клиент данные всё равно не получает, говорит, что строка пустая и всё.

Автор: Rickert 21.2.2007, 11:19
Протупил: зануляю массив, после указания

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)