当我启动 server.cpp 时,我立即收到短语“客户端已连接!”,尽管我尚未启动该应用程序 client.cpp 。当我在程序运行 client.cpp 后启动应用程序 client.cpp 时,控制台中没有任何输出。
我知道这种情况发生在我身上,因为我有一个运行 server.php 的应用程序,变量“new Connection”由于某种原因等于 18446744073709551615。我尝试更改端口、IP 地址,但没有任何帮助
服务器.cpp
#include <iostream>//библиотека ввода вывода
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>//библиотека windows для работы с сетью
#pragma warning(disable: 4996)
using namespace std;
int main() {
//подключили библиотеку
WSAData wsaData;
WORD DLLVersion = MAKEWORD(2, 1);
if (WSAStartup(DLLVersion, &wsaData) != 0) {
cout << "Error" << endl;
exit(1);
}//1-ый параметр запрашиваемая версия библиотеки
//заполнение информации об адресе сокета
SOCKADDR_IN addr;//название интернет протокола
int sizeofaddr = sizeof(addr);
addr.sin_addr.s_addr = inet_addr("172.2.2.2");//хранит ip адрес
addr.sin_port = htons(4321);//порт
addr.sin_family = AF_INET;//симейство протоколов
//для установления соединения
//прослушивание на определенном порту
SOCKET sListen = socket(AF_INET, SOCK_STREAM, NULL);//создание сокета, SOCK_STREAM - протокол, который устанавливает соединение
bind(sListen, (SOCKADDR*)&addr, sizeof(addr));//привязываем адрес и порт к сокету, 2-ой параметр - указатель на SOCKADDR_IN adrr, 3-ий - размер SOCKADDR_IN adrr
//прослушивание порта в ожидании соединения со стороны клиента
listen(sListen, SOMAXCONN);//SOMAXCONN - максимальное число запрос ожидающих обработки
//новый сокет чтобы удерживать соединение с клиентом
SOCKET newConnection;
newConnection = accept(sListen, (SOCKADDR*)&addr, &sizeofaddr); //accept возвращает указатель на новый сокет. второй параметр будет содержать ip адрес клиента, который произвел подключение
if (newConnection == 0) {
cout << "Error #2\n";
}
else {
cout << "Client Connected!\n" << newConnection;
}
system("pause");
return 0;
}
客户端.cpp
#include <iostream>//библиотека ввода вывода
#pragma comment(lib, "ws2_32.lib")
#include <winsock2.h>//библиотека windows для работы с сетью
#pragma warning(disable: 4996)
using namespace std;
int main() {
//подключили библиотеку
WSAData wsaData;
WORD DLLVersion = MAKEWORD(2, 1);
if (WSAStartup(DLLVersion, &wsaData) != 0) {
cout << "Error" << endl;
exit(1);
}//1-ый параметр запрашиваемая версия библиотеки
//заполнение информации об адресе сокета
SOCKADDR_IN addr;//название интернет протокола
int sizeofaddr = sizeof(addr);
addr.sin_addr.s_addr = inet_addr("172.2.2.2");//хранит ip адрес
addr.sin_port = htons(4321);//порт
addr.sin_family = AF_INET;//симейство протоколов
//создание сокета для соединения с сервером
SOCKET Connection = socket(AF_INET, SOCK_STREAM, NULL);//создание сокета, SOCK_STREAM - протокол, который устанавливает соединение
if (connect(Connection, (SOCKADDR*)&addr, sizeof(addr)) !=0) {
cout << "Errror: failed connect to server.\n";
return 1;
}//пытаемся соединиться с сервером
cout << "Connected to server!\n";
system("pause");
return 0;
}
检查socket()和bind()函数都返回值!= -1。
另外,它报告什么错误?没有足够的信息来寻求解决方案。