Я пытаюсь использовать базовую программу для сокетов на C, но стараюсь, как могу, я получаю ошибку «Отказано в соединении» на стороне клиента. Может кто-нибудь помочь мне понять, почему - PullRequest
0 голосов
/ 10 октября 2019

Это базовая программа для сокетов, устанавливающая соединение между сервером и клиентом.

Отправка и получение данных - это совсем другая проблема, поэтому я пока не разбирался в этом.

МожетКто-нибудь, помогите выяснить, почему в моем коде отказано в соединении?

Сторона сервера

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>
#define PORT 9999

#define ERR perror("Message : ");
int main()
{
    int sck = socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in serv,*ptr;
    serv.sin_port = htonl(PORT);
    serv.sin_addr.s_addr = INADDR_ANY;
    serv.sin_family = AF_INET;
    ptr = &serv;
    int len = sizeof(serv);
    int x;
    if(x=bind(sck,(struct sockaddr *)ptr,(socklen_t)len)<0)
    {
        perror("Message : ");
        return -1;
    }
    printf("Bind : %d",x);
    if(x=listen(sck,3)<0)
    {
        ERR;
    }
    printf("Listen : %d",x);
    int newfd = accept(sck,(struct sockaddr *)ptr,(socklen_t *)&len);
    if(newfd<0)
    {
        ERR;
    }
    printf("Newfd : %d",newfd);
    printf("Connection Established");
    return 1;
}

КлиентСторона

#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <arpa/inet.h>
#define PORT 9999
#define ERR perror("Message ");
int main()
{
    int sck = socket(AF_INET,SOCK_STREAM,0);
    struct sockaddr_in cli, *ptr;
    cli.sin_port = htonl(PORT);
    ptr = &cli;
    inet_aton("127.0.0.1",&cli.sin_addr);
    cli.sin_family = AF_INET;

    int len = sizeof(cli);
    if(connect(sck,(struct sockaddr *)ptr,(socklen_t)len)<0)
    {
        ERR;
        return -1;
    }
    printf("Connection established");
}
...