Как написать клиент-серверное приложение? - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Хочу написать такую программу. Есть сервер у меня на компютере и есть клиент на другом компютере. Клиент посылает какую-то строку серверу а сервер в ответ посылает другую строку. Я такое уже писал но клиент и сервер были на одном компютере.
Вот мой код для клиента и сервера которые на одном компе сервер
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
        WORD v=MAKEWORD(2,0);
        WSADATA d;
        int e=WSAStartup(v,&d);
        if (e)
        {
                perror("error initializing winsock");
                return 1;
        }
        struct sockaddr_in local;
        int s;
        int s1;
        int rc;
        char buf[1];
        local.sin_family=AF_INET;
        local.sin_port=htons(7500);
        local.sin_addr.s_addr=htonl(INADDR_ANY);
        s=socket(AF_INET,SOCK_STREAM,0);
        if (s<0)
        {
                perror("error calling socket");
                return 1;
        }
        rc=bind(s,(struct sockaddr *)&local,sizeof(local));
        if (rc<0)
        {
                perror("error calling bind");
                return 1;
        }
        rc=listen(s,5);
        if (rc)
        {
                perror("error calling listen");
                return 1;
        }
        s1=accept(s,NULL,NULL);
        if (s1<0)
        {
                perror("error calling accept");
                return 1;
        }
        rc=recv(s1,buf,1,0);
        if (rc<=0)
        {
                perror("error calling recv");
                return 1;
        }
        printf("%c\n",buf[0]);
        rc=send(s1,"2",1,0);
        if (rc<=0)
                perror("error calling send");
        if (closesocket(s))
                perror("error calling closesocket");
        if (closesocket(s1))
                perror("error calling closesocket");
        WSACleanup();
        return 0;
}
клиент
#include <winsock2.h>
#include <stdio.h>
int main(void)
{
        WORD v=MAKEWORD(2,0);
        WSADATA d;
        int e=WSAStartup(v,&d);
        if (e)
        {
                perror("error initializing winsock");
                return 1;
        }
        struct sockaddr_in peer;
        int s;
        int rc;
        char buf[1];
        peer.sin_family=AF_INET;
        peer.sin_port=htons(7500);
        peer.sin_addr.s_addr=inet_addr("127.0.0.1");
        s=socket(AF_INET,SOCK_STREAM,0);
        if (s<0)
        {
                perror("error calling socket");
                return 1;
        }
        rc=connect(s,(struct sockaddr *)&peer,sizeof(peer));
        if (rc)
        {
                perror("error calling connect");
                return 1;
        }
        rc=send(s,"1",1,0);
        if (rc<=0)
        {
                perror("error calling send");
                return 1;
        }
        rc=recv(s,buf,1,0);
        if (recv<=0)
                perror("error calling recv");
        else
                printf("%c\n",buf[0]);
        if (closesocket(s))
                perror("error calling closesocket");
        WSACleanup();
        return 0;
}
Что тут поменять???
Ну хоть ктонибудь ответте.

Решение задачи: «Как написать клиент-серверное приложение?»

textual
Листинг программы
    peer.sin_addr.s_addr = inet_addr("127.0.0.1");

Объяснение кода листинга программы

  1. В данном коде происходит привязка сокета к адресу localhost (127.0.0.1). Пояснение: — peer.sin_addr.s_addr = inet_addr(127.0.0.1);: Здесь используется функция inet_addr для преобразования символьного адреса 127.0.0.1 в числовое значение, которое затем присваивается полю s_addr структуры sockaddr_in, которая представляет собой структуру, используемую для хранения информации о сокете. — В результате, сокет будет привязан к адресу localhost (127.0.0.1), что означает, что он будет слушать входящие соединения только от этого адреса.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.333 из 5
Похожие ответы