Я делаю код программирования сокета
которые отправляют сокет и получают с сервера. (Www.dict.org)
Я могу подключиться к серверу используя connect и send ()
(Для подключения серверу требуется одна отправка)
После подключения я отправил массив символов в виде команды, но сервер ничего не отправляет.
Я процитировал части 2.3 и 8 RFC 2229 (https://tools.ietf.org/html/rfc2229)
и я отправил массив символов как "HELP" или "DEFINE! ONE".
Несколько раз сервер отправлял мне сообщение о неправильном заказе.
Но теперь я не могу получить подобное сообщение.
#include <stdlib.h>
#include <winsock2.h>
#include <ws2tcpip.h>
#include <iostream>
using namespace std;
#pragma comment (lib, "Ws2_32.lib")
void print_array(char x[]);
int count_array(char x[]);
int main()
{
int iResult;
WSADATA wsa;
SOCKET Client_sock;
struct sockaddr_in Sock_info;
char message[512]; // recv function's result will be saved.
//Command lines MUST NOT exceed 1024 characters in length (Part 2.3 RFC 2229)
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
{
cout << "WSAStartup failed with error" << endl;
system("pause");
return FALSE;
}
Client_sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (Client_sock == INVALID_SOCKET)
{
cout << "Failed to create a socket" << endl;
closesocket(Client_sock);
return FALSE;
}
int nTime = 10000; //10 Sec stopwatch
if (setsockopt(Client_sock, SOL_SOCKET, SO_RCVTIMEO, (char*)&nTime, sizeof(nTime)) == SOCKET_ERROR)
{
shutdown(Client_sock, SD_RECEIVE | SD_SEND);
closesocket(Client_sock);
cout << "Waiting" << endl;
cout << "10 Secs over.";
system("pause");
return FALSE;
}
memset(&Sock_info, 0, sizeof(Sock_info));// Address structure clear
Sock_info.sin_family = AF_INET;
Sock_info.sin_port = htons(2628);// Get port
InetPton(AF_INET, "216.18.20.172", &Sock_info.sin_addr.s_addr); //IP of dict.org
if (connect(Client_sock, (SOCKADDR*)&Sock_info, sizeof(Sock_info)) == SOCKET_ERROR) // The fail of request to connect the server
{
closesocket(Client_sock);
return FALSE;
}
//Connect using text capabilities msg-id for code 220 in part 3.1 RFC 2229
if (send(Client_sock, "[ client initiates connection ]", 512, 0) < 0)
{
closesocket(Client_sock);
return FALSE;
}
if (recv(Client_sock, message, 512, 0) < 0)
{
closesocket(Client_sock);
return FALSE;
}
cout << "Send Help" << endl;
char request[] = "<HELP>";
iResult = send(Client_sock, request, sizeof(request), 0);
if (iResult < 0)
{
cout << "Failed to send a request" << endl;
system("pause");
closesocket(Client_sock);
return FALSE;
}
cout << "SENT" << endl;
while (iResult > 0)
{
iResult = recv(Client_sock, message, 512, 0);
cout << "RECEIVed" << endl;
if (iResult < 0)
{
cout << "Failed to receive a message" << endl;
system("pause");
closesocket(Client_sock);
return FALSE;
}
print_array(message);
}
print_array(message);
// Print the information
int count = 0;
//4. Close socket
closesocket(Client_sock);
//5. Quit winsock
WSACleanup();
return 0;
}
int count_array(char x[])
{
int cnt;
cnt = 0;
for (int i = 0; x[i] != '\n'; i++)
{
cnt++;
}
return cnt;
}
void print_array(char x[])
{
int i;
for (i = 0; i < count_array(x); i++)
{
cout << x[i];
}
cout << endl;
}
```