ВУЗ:
Составители:
56
void write_to_server (int filedes)
{
int nbytes;
nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1);
if (nbytes < 0)
{
perror ("write");
exit (EXIT_FAILURE);
}
}
int main (void)
{
extern void init_sockaddr (struct sockaddr_in *name,
const char *hostname,
uint16_t port);
int sock;
struct sockaddr_in servername;
/* Create the socket. */
sock = socket (PF_INET, SOCK_STREAM, 0);
if (sock < 0)
{
perror ("socket (client)");
exit (EXIT_FAILURE);
}
/* Connect to the server. */
init_sockaddr (&servername, SERVERHOST, PORT);
if (0 > connect (sock,
(struct sockaddr *) &servername,
sizeof (servername)))
{
perror ("connect (client)");
exit (EXIT_FAILURE);
}
/* Send data to the server. */
write_to_server (sock);
close (sock);
exit (EXIT_SUCCESS);
}
Приложение сервера является несколько более сложным. Так как необходимо
предоставить возможность нескольким клиентам подключиться к гнезду сервера, будет
некорректным просто ожидать данных от одного клиента с помощью функций read или
recv. Правильным является использование функции select для ожидания ввода от всех
открытых гнезд. В примере используется функция make_socket, определенная в
примере к базе данных протоколов.
#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#define PORT 5555
#define MAXMSG 512
int read_from_client (int filedes)
{
void write_to_server (int filedes) { int nbytes; nbytes = write (filedes, MESSAGE, strlen (MESSAGE) + 1); if (nbytes < 0) { perror ("write"); exit (EXIT_FAILURE); } } int main (void) { extern void init_sockaddr (struct sockaddr_in *name, const char *hostname, uint16_t port); int sock; struct sockaddr_in servername; /* Create the socket. */ sock = socket (PF_INET, SOCK_STREAM, 0); if (sock < 0) { perror ("socket (client)"); exit (EXIT_FAILURE); } /* Connect to the server. */ init_sockaddr (&servername, SERVERHOST, PORT); if (0 > connect (sock, (struct sockaddr *) &servername, sizeof (servername))) { perror ("connect (client)"); exit (EXIT_FAILURE); } /* Send data to the server. */ write_to_server (sock); close (sock); exit (EXIT_SUCCESS); } Приложение сервера является несколько более сложным. Так как необходимо предоставить возможность нескольким клиентам подключиться к гнезду сервера, будет некорректным просто ожидать данных от одного клиента с помощью функций read или recv. Правильным является использование функции select для ожидания ввода от всех открытых гнезд. В примере используется функция make_socket, определенная в примере к базе данных протоколов. #include#include #include #include #include #include #include #include #define PORT 5555 #define MAXMSG 512 int read_from_client (int filedes) { 56
Страницы
- « первая
- ‹ предыдущая
- …
- 54
- 55
- 56
- 57
- 58
- …
- следующая ›
- последняя »