[SOLVED] C++ i gniazda

Bash, C, C++, Java, PHP, Ruby, GTK, Qt i wiele innych - wszystko tutaj.
Awatar użytkownika
Brzys
Piegowaty Guziec
Piegowaty Guziec
Posty: 7
Rejestracja: 23 lut 2008, 16:41
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

[SOLVED] C++ i gniazda

Post autor: Brzys »

Oto kod:

Kod: Zaznacz cały

#include <iostream>
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <stdlib.h>
#include <string.h>
using namespace std;


void blad(string msg)
{
	cout << msg;
	exit(0);
}

int main(int argc, char *argv[])
{
	int sockfd, portno, n;
	struct sockaddr_in serv_addr;
    struct hostent *server;
	
	char bufer[256];
	if (argc < 3)
	{
		fprintf(stderr,"usage %s hostname port\n", argv[0]);
		exit(0);
	}
	portno = atoi(argv[2]);
	sockfd = socket(AF_INET, SOCK_STREAM, 0);
	if(sockfd < 0) 
	{
		 blad("Błąd: nie można otworzyć gniazda");
	}
	server = gethostbyname(argv[1]);
	if(server == NULL)
	{
        printf("Błąd: nie ma takiego hosta ;)\n");
        exit(0);
    }
	bzero((char *) &serv_addr, sizeof(serv_addr));
    serv_addr.sin_family = AF_INET;
    bcopy((char *)server->h_addr, (char *)&serv_addr.sin_addr.s_addr,
	server->h_length);
    serv_addr.sin_port = htons(portno);
	if(connect(sockfd, &serv_addr, sizeof(serv_addr)) < 0)
	{ 
        blad("Błąd z połączeniem");
	}
	printf("Wpisz swoja wiadomość: ");
	bzero(bufer,255);
	fgets(bufer,255,stdin);
	n = write(sockfd,bufer,strlen(bufer));
	if(n < 0)
	{
        blad("Błąd: nie można użyć gniazda");
	}
	bzero(bufer,255);
	n = read(sockfd, bufer, 255);
	if(n < 0)
	{
		blad("Błąd: nie można odczytać gniazda");
	}
	cout << bufer << endl;
	return 0;
}
Błąd jest w 47 linijce, to jest w tej pogrubionej:
error: cannot convert ‘sockaddr_in*’ to ‘const sockaddr*’ for argument ‘2’ to ‘int connect(int, const sockaddr*, socklen_t)’
Dla zabawy gdy przełożyć to na C, kompiluje się bez problemu:-(.
Dziękuje z góry za pomoc.
Ubutnu/Kubuntu zakonczyło swój rozwój na v. 9.04. Nowsze wersje to linuxowe "7"
Awatar użytkownika
beluosus
Zakręcona Traszka
Zakręcona Traszka
Posty: 695
Rejestracja: 01 paź 2006, 15:32
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Xfce
Architektura: x86
Kontakt:

Odp: C++ i gniazda

Post autor: beluosus »

Ojej, niezła mieszanka C z C++ ale jeżeli po prostu chcesz żeby działało to zrób rzutowanie:

Kod: Zaznacz cały

if(connect(sockfd, (sockaddr *) &serv_addr, sizeof(serv_addr)) < 0)
C-like cast, bo widzę, że tylko takie tam masz.

PS
W sumie tytuł mylący, bo to właściwie C z małą domieszką C++.
Kurs Linuksa: for i in $(ls /bin); do man $i; done
__________________
http://beluosus.pl/
Awatar użytkownika
Brzys
Piegowaty Guziec
Piegowaty Guziec
Posty: 7
Rejestracja: 23 lut 2008, 16:41
Płeć: Mężczyzna
Wersja Ubuntu: inny OS
Środowisko graficzne: Fluxbox
Architektura: x86
Kontakt:

Odp: C++ i gniazda

Post autor: Brzys »

Wiem wiem, to wyglądało na C++ wcześniej tylko przeszło metamorfozę ;). Dziękuje za odpowiedz, działa ;)
Ubutnu/Kubuntu zakonczyło swój rozwój na v. 9.04. Nowsze wersje to linuxowe "7"
ODPOWIEDZ

Wróć do „Programowanie”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 8 gości