Ошибка подключения клиента к серверу TCP/IP

158
22 августа 2021, 19:30

не могу создать соединение между сервером и клиентом по tcp/ip на Linux Mint. Компилирую через gcc.Connect возвращает -1 и errno выдает ECONNREFUSED. До этого сервера писал только на винде используя winsock2. Сервер

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/signal.h>
#include <sys/wait.h>
#include <sys/resource.h>
#include <netinet/in.h>
#include <iostream>
#include <unistd.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
    int s,s2,bl;
    s=socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in local;
    local.sin_port=htonl(7500);
    local.sin_family=AF_INET;
    local.sin_addr.s_addr=htonl(INADDR_ANY);
    bl=bind(s,(struct sockaddr*)&local,sizeof(local));
    cout<<"Listen\n";
    bl=listen(s,5);
    cout<<"Accept\n";
    s2=accept(s,0,0);
    send(s2,"HW",sizeof("HW"),0);
}

Клиент

#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netinet/in.h>
#include <iostream>
#include <unistd.h>
#include <iomanip>
#include <string.h>
using namespace std;
int main()
{
    int s,rc;
    s=socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in peer;
    peer.sin_family=AF_INET;
    peer.sin_port=htons(7500);
    peer.sin_addr.s_addr=inet_addr("127.0.0.1");
    cout<<"Connecting\n";
    rc=connect(s,(struct sockaddr*)&peer,sizeof(peer));
    switch (errno)
    {
    case EACCES:
        fprintf(stdout, "EACCESS");
        break;
    case EPERM:
        fprintf(stdout, "EPERM");
        break;
    case EADDRINUSE:
        fprintf(stdout, "EADDRINUSE");
        break;
    case EAFNOSUPPORT:
        fprintf(stdout, "EAFNOSUPPORT");
        break;
    case EAGAIN:
        fprintf(stdout, "EAGAIN");
        break;
    case EALREADY:
        fprintf(stdout, "EALREADY");
        break;
    case EBADF:
        fprintf(stdout, "EBADF");
        break;
    case ECONNREFUSED:
        fprintf(stdout, "ECONNREFUSED");
        break;
    case EFAULT:
        fprintf(stdout, "EFAULT");
        break;
    case EINPROGRESS:
        fprintf(stdout, "EINPROGRESS");
        break;
    case EINTR:
        fprintf(stdout, "EINTR");
        break;
    case EISCONN:
        fprintf(stdout, "EISCONN");
        break;
    case ENETUNREACH:
        fprintf(stdout, "ENETUNREACH");
        break;
    case ENOTSOCK:
        fprintf(stdout, "ENOTSOCK");
        break;
    case ETIMEDOUT:
        fprintf(stdout, "ETIMEDOUT");
        break;
    default:
        fprintf(stdout, "unknown error(%d)", errno);
        break;
    }
    cout<<endl;
    char choice[100];
    char buf[100];
    recv(s,buf,sizeof("HW"),0);
}
Answer 1
local.sin_port=htonl(7500);

Должно быть htons, а не htonl — в итоге сервер не тот порт слушает.

На будущее: советую освоить использование утилиты netstat.
netstat -t4lp сразу бы показало, что не так.

READ ALSO
Почему значение возвращается либо в экспоненциальной форме, либо возвращается 0

Почему значение возвращается либо в экспоненциальной форме, либо возвращается 0

Первый вопрос: почему если не указать fixed значение вернется в экспоненциальной форме? Второй вопрос: почему если поставить fixed, то вернется...

73
Uncaught SyntaxError: Unexpected token &#39;}&#39; в блоке ajax()

Uncaught SyntaxError: Unexpected token '}' в блоке ajax()

Помогите понять почему в консоли ошибка Uncaught SyntaxError: Unexpected token '}'

185
Как добавить #якорь в адресную строку

Как добавить #якорь в адресную строку

Как сделать чтобы при нажатии на якорь, к ссылке добавлялся якорь типо https://123ru/#anchor ? И при нажатии каждого последующего изменялся

174