Запуск сервера на C++ Visual Studio [закрыт]

123
03 сентября 2019, 03:20

Запускаю локальный отладчик Windows(x86).

Код C++:

#include "stdafx.h"
#include <iostream>
#include <string>
#include <WS2tcpip.h>
#pragma comment(lib, "ws2_32.lib")
using namespace std;
void main()
{
    string ipAddress = "127.0.0.1";         // IP Address of the server
    int port = 54000;                       // Listening port # on the server
                                            // Initialize WinSock
    WSAData data;
    WORD ver = MAKEWORD(2, 2);
    int wsResult = WSAStartup(ver, &data);
    if (wsResult != 0)
    {
        cerr << "Can't start Winsock, Err #" << wsResult << endl;
        return;
    }
    // Create socket
    SOCKET sock = socket(AF_INET, SOCK_STREAM, 0);
    if (sock == INVALID_SOCKET)
    {
        cerr << "Can't create socket, Err #" << WSAGetLastError() << endl;
        WSACleanup();
        return;
    }
    // Fill in a hint structure
    sockaddr_in hint;
    hint.sin_family = AF_INET;
    hint.sin_port = htons(port);
    inet_pton(AF_INET, ipAddress.c_str(), &hint.sin_addr);
    // Connect to server
    int connResult = connect(sock, (sockaddr*)&hint, sizeof(hint));
    if (connResult == SOCKET_ERROR)
    {
        cerr << "Can't connect to server, Err #" << WSAGetLastError() << endl;
        closesocket(sock);
        WSACleanup();
        return;
    }
    // Do-while loop to send and receive data
    char buf[4096];
    string userInput;
    do
    {
        // Prompt the user for some text
        cout << "> ";
        getline(cin, userInput);
        if (userInput.size() > 0)       // Make sure the user has typed in something
        {
            // Send the text
            int sendResult = send(sock, userInput.c_str(), userInput.size() + 1, 0);
            if (sendResult != SOCKET_ERROR)
            {
                // Wait for response
                ZeroMemory(buf, 4096);
                int bytesReceived = recv(sock, buf, 4096, 0);
                if (bytesReceived > 0)
                {
                    // Echo response to console
                    cout << "SERVER> " << string(buf, 0, bytesReceived) << endl;
                }
            }
        }
    } while (userInput.size() > 0);
    // Gracefully close down everything
    closesocket(sock);
    WSACleanup();
}

Сначала не запускалось приложение.

Ошибка  LNK2019 ссылка на неразрешенный внешний символ _WinMain@16 в функции "int __cdecl invoke_main(void)" (?invoke_main@@YAHXZ)
Ошибка  LNK1120 неразрешенных внешних элементов: 1      

Мне подсказали, что надо сделать настройки в проекте, т.е. сменить на подсистему на консоль.

В итоге приложение запустилось, но практически сразу и закрылось

И в отладчике:

"WindowsProject1.exe" (Win32). Загружено "C:\Users\comp\source\repos\WindowsProject1\Debug\WindowsProject1.exe". Символы загружены.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\ntdll.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\kernel32.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Выгружено "C:\Windows\SysWOW64\kernel32.dll"
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\kernel32.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\KernelBase.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\ws2_32.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\sechost.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\msvcp140d.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\rpcrt4.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\sspicli.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\vcruntime140d.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\cryptbase.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\ucrtbased.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\bcryptprimitives.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\mswsock.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\kernel.appcore.dll". Невозможно найти или открыть PDB-файл.
"WindowsProject1.exe" (Win32). Загружено "C:\Windows\SysWOW64\msvcrt.dll". Невозможно найти или открыть PDB-файл.
Поток 0xb244 завершился с кодом 0 (0x0).
Поток 0x98ec завершился с кодом 0 (0x0).
Поток 0xc6ac завершился с кодом 0 (0x0).
Программа "[41160] WindowsProject1.exe" завершилась с кодом 0 (0x0).
Answer 1

Вы явно пытаетесь делать оконное приложение, а не консольное.

Измените свойства проекта (Компоновщик -> Система -> Подсистема).

Update

Вангую, что вы просмотрели сообщение в окне наподобие

Can't connect to server, Err #10061

У вас на 54000 порту сервер запущен? К кому вы коннектились?

READ ALSO
std::move для объекта, возвращенного функцией

std::move для объекта, возвращенного функцией

Имеется один файл maincpp, в котором определены две глобальные функции getSomeResultFromSomeFunc(), processResult() и функция main():

99
Доступ к файлу proc//mem

Доступ к файлу proc//mem

При прохождении одного из онлайн тестов наткнулся на сложный вопросВопрос формулируется примерно так:

119
Как спарсить строку?

Как спарсить строку?

Есть строка вида: "40 1234567 12"

139