В меню, которое отображается первым делом при запуске приложения winsock, я хотел бы иметь возможность выбрать порт при запуске, но у меня возникают проблемы с преобразованием int в PCSTR или любым другим типом преобразования, как я пробовал несколько.
Вот некоторый код:
Мой заголовочный файл:
char* DEFAULT_PORT = "10187";
Мой файл cpp:
cout << "\n Input port: ";
cin >> UserDefinedPort;
if (UserDefinedPort > 1000){
char* p = p + UserDefinedPort;
DEFAULT_PORT = p;
} else {
// err...
}
Начало моей функции носка:
int SocketAddrInfo(int iResult, addrinfo* MySocket, addrinfo** MySocketResult){
iResult = getaddrinfo(NULL, DEFAULT_PORT, MySocket, MySocketResult);
if (iResult != 0) {
printf("Get address info failed with error: %d\n", iResult);
WSACleanup();
std::cout << "Server closing in 5 ";
for (int i = 4; i > 0; i--){
Sleep(1 * 1000);
cout << i << " ";
}
cout << "Server closing now!" << endl;
return 1;
}
return iResult;
}
Выдает ошибки чтения памяти или ошибки типа kernel.dll независимо от того, какой метод я пытаюсь использовать.
Любая помощь будет отличной, заранее спасибо!
Во-первых, эта строка неопределенное поведение:
char* p = p + UserDefinedPort;
Вы пытаетесь добавить число к указателю до того, как указатель будет даже инициализирован. Кроме того, вы не можете просто добавить номер к char*
указатель для увеличения числового значения, которое char*
Строка представляет. Вам нужно будет преобразовать строку в целое число, затем увеличить его, а затем преобразовать результат обратно в строку.
Я предлагаю другой подход. Повсеместно обрабатывайте сообщение как целое число и при вызове конвертируйте его только в строку getaddrinfo()
Например:
unsigned short DEFAULT_PORT = 10187;
unsigned short UserDefinedPort;
cout << "\n Input port: ";
if (cin >> UserDefinedPort)
{
if (UserDefinedPort > 1000)
DEFAULT_PORT = UserDefinedPort;
else
{
// err...
}
}
else
{
// err...
}
#include <sstream>
int SocketAddrInfo(addrinfo* MySocket, addrinfo** MySocketResult)
{
std::ostringstream oss;
oss << DEFAULT_PORT;
int iResult = getaddrinfo(NULL, oss.str().c_str(), MySocket, MySocketResult);
//...
}
Других решений пока нет …