Как написать клиент-серверное приложение? - 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");
Объяснение кода листинга программы
- В данном коде происходит привязка сокета к адресу 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), что означает, что он будет слушать входящие соединения только от этого адреса.