Ошибка в клиенте приложения

326
23 мая 2017, 04:00

Использую клиент из примера http://citforum.ru/book/cook/winsock.shtml

    include "stdafx.h"
#define _WINSOCK_DEPRECATED_NO_WARNINGS
// Пример простого TCP клиента
#include <stdio.h>
#include <string.h>
#include <winsock2.h>
#include <windows.h>
#define PORT 666
#define SERVERADDR "*.*.*.*" //Звёздочками пометил свой IP
int main(int argc, char* argv[])
{
    char buff[1024];
    printf("TCP DEMO CLIENT\n");
    // Шаг 1 - инициализация библиотеки Winsock
    if (WSAStartup(0x202, (WSADATA *)&buff[0]))
    {
        printf("WSAStart error %d\n", WSAGetLastError());
        return -1;
    }
    // Шаг 2 - создание сокета
    SOCKET my_sock;
    my_sock = socket(AF_INET, SOCK_STREAM, 0);
    if (my_sock < 0)
    {
        printf("Socket() error %d\n", WSAGetLastError());
        return -1;
    }
    // Шаг 3 - установка соединения
    // заполнение структуры sockaddr_in - указание адреса и порта сервера
    sockaddr_in dest_addr;
    dest_addr.sin_family = AF_INET;
    dest_addr.sin_port = htons(PORT);
    HOSTENT *hst;
    // преобразование IP адреса из символьного в сетевой формат
    if (inet_addr(SERVERADDR) != INADDR_NONE)
        dest_addr.sin_addr.s_addr = inet_addr(SERVERADDR);
    else
    {
        // попытка получить IP адрес по доменному имени сервера
        if (hst = gethostbyname(SERVERADDR))
            // hst->h_addr_list содержит не массив адресов,
            // а массив указателей на адреса
            ((unsigned long *)&dest_addr.sin_addr)[0] =
            ((unsigned long **)hst->h_addr_list)[0][0];
        else
        {
            printf("Invalid address %s\n", SERVERADDR);
            closesocket(my_sock);
            WSACleanup();
            return -1;
        }
    }
    // адрес сервера получен - пытаемся установить соединение
    if (connect(my_sock, (sockaddr *)&dest_addr, sizeof(dest_addr)))
    {
        printf("Connect error %d\n", WSAGetLastError());
        return -1;
    }
    printf("Soedinenie s %s uspeshno ustanovlenno\n \
            Type quit for quit\n\n", SERVERADDR);
    // Шаг 4 - чтение и передача сообщений
    int nsize;
    while ((nsize = recv(my_sock, &buff[0], sizeof(buff) - 1, 0)) != SOCKET_ERROR)
    {
        // ставим завершающий ноль в конце строки
        buff[nsize] = 0;
        // выводим на экран
        printf("S=>C:%s", buff);
        // читаем пользовательский ввод с клавиатуры
        printf("S<=C:"); fgets(&buff[0], sizeof(buff) - 1, stdin);
        // проверка на "quit"
        if (!strcmp(&buff[0], "quit\n"))
        {
            // Корректный выход
            printf("Exit...");
            closesocket(my_sock);
            WSACleanup();
            return 0;
        }
        // передаем строку клиента серверу
        send(my_sock, &buff[0], strlen(&buff[0]), 0);
    }
    printf("Recv error %d\n", WSAGetLastError());
    closesocket(my_sock);
    WSACleanup();
    return -1;
}

Выдает ошибку . Не понимаю как её исправить. Может кто сталкивался? Использую visual studio 2015

Answer 1

после списка include добавьте строку #pragma comment(lib, "Ws2_32.lib") - это подключит нужную либу (ее можно конечно подключить и через параметры линковщика).

Порт лучше поменять на какой-нибудь больше 1024.

READ ALSO
Как узнать конфигурацию Qt

Как узнать конфигурацию Qt

Здравствуйте, есть ли способ определить какие ключи использовались в configure при сборке

392
TCP- сервер получение файла на клиент

TCP- сервер получение файла на клиент

У меня есть TCP-сервер и TCP-клиентКлиент передает сообщение и получает в ответ ту же строку

347
Удаление строк из файла

Удаление строк из файла

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

362
перевод из char[] в string

перевод из char[] в string

Есть строка

296