[C] aplikacja serwerowa

0
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>

int main(void)
{
	int socket1, socket2;
	struct sockaddr_in addr, client;
		
	socket1 = socket(AF_INET, SOCK_STREAM, 0);
	if (socket1 != -1)
	{
		printf("utworzono gniazdo.\n");
		addr.sin_family = AF_INET;
		addr.sin_port = 0;
		addr.sin_addr.s_addr = inet_addr("127.0.0.1");
		memset(&(addr.sin_zero), "\0", 8);
		bind(socket1, (struct sockaddr *)&addr, sizeof(struct sockaddr));
		listen(socket1, 5);
		socket2 = accept(socket1, (struct sockaddr *)&client, sizeof(struct sockaddr_in));
		if (socket2 != -1)
		{
			printf("nawiazano polaczenie\n");
			char buf[255];
			recv(socket2, buf, 255, 0);
			send(socket2, buf, sizeof(buf), 0);
			printf(buf);
			close(socket2);	
			
		} else printf("kupal\n");
		
				
				
				
		close(socket1);
	} else printf("Nie mozna utworzyc gnizda\n");
	
	return 0;
}

kompiluje i odpalam. potem:

$ telnet 127.0.0.1 <port>
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.
Connection closed by foreign host.

a serwer wypisuje:
utworzono gniazdo.
kupa

no i pytanie, czemu nie moge nic wpisac przez clienta?
czemu serwer nie czeka na dane?

0

NAZWA
accept - przyjmuj połączenie na gnieździe

SKŁADNIA
#include <sys/types.h>
#include <sys/socket.h>

   int  accept(int  s,  struct  sockaddr  *addr,  int
   *addrlen);

U Ciebie jest:

socket2 = accept(socket1, (struct sockaddr *)&client, sizeof(struct sockaddr_in));

Ostatni parametr nie jest wskaznikiem ;-P W ogóle polecam stworzenie sobie zmiennej:

socklen_t sa_len;
/* ... */
sa_len = sizeof(struct sockaddr);

Łatwiej się wtedy pisze - tutaj &sa_len.

1 użytkowników online, w tym zalogowanych: 0, gości: 1