Thread overview
Yapı içerisindeki elemanların sizeof değerini alma
Aug 23, 2013
agora
Aug 23, 2013
agora
Aug 23, 2013
agora
August 23, 2013

Selam sürekli soruyorum özür dilerim :)

Elimde şöyle bir yapı var

struct SockAdr
	{
		sockaddr_in address;

	}

Doğru çalıştım mı bilmiyorum ama onu şöyle işleme aldım

SockAdr soc;
	soc.address.sin_family = AF_INET;
	soc.address.sin_addr.s_addr = INADDR_ANY;
	soc.address.sin_port = htons(15000);

Daha sonra bunu if ile kullandım

if (bind(create_socket, sok.sokad, &soc.address, sizeof(soc.address) == 0))
	{
		writeln("Binding Socket\n");
	}

Burada belirttiğim sizeof(soc.address) kısmını kabul etmiyor. Bana ayrıca size_t mi denemek istediniz diyor.

http://ddili.org/tanitim/fark_dizgi.html

Bu makaleden yola cikarak ben de soc.address.length denemeye calistim kabul etmedi. No Property sockaddr_in dedi.

Fakat SockAdr.sizeof şeklinde bir işlem yapabiliyorum. ben adress'in sizeof değerini nasıl alabilirim?

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 23, 2013

Onu şöyle düzenlesem dahi hata alıyorum.

Aldigim hata: Error: incompatible types for ((address) == (0)): 'sockaddr_in' and 'int' (SimpWebS)

Not: kutuphaneleri kendi denemelerim icin tamamini cagirdim daha islemlerim bitmedi de daha basi sayilacak yerde hata aldim :)

import std.stdio;
import std.c.stdlib;
import std.c.windows.winsock;
import std.c.windows.windows;
import std.c.windows.stat;
import std.c.windows.com;
import std.socket;
import core.memory;
import core.sys.posix.netinet.in_;
import core.sys.posix.arpa.inet;
import core.sys.posix.unistd;
import core.sys.posix.sys.stat;
import core.sys.posix.sys.types;

/*
* import core.sys.posix.sys.socket;
* import core.sys.posix.netinet.tcp;
  import core.sys.posix.net.if_;
 */



void main()
{
	int create_socket, new_socket;
	socklen_t addrlen;
	int bufsize = 1024;

	char * buffer = (cast(char*)malloc(bufsize));


	if((create_socket == socket(AF_INET, SOCK_STREAM, 0)) > 0)
	{
		writeln("The socket was created\n");
	}


	sockaddr_in address;

	address.sin_family = AF_INET;
	address.sin_addr.s_addr = INADDR_ANY;
	address.sin_port = htons(15000);


	if (bind(create_socket, cast(sockaddr *) &address, address == 0))
	{
		writeln("Binding Socket\n");
	}


}

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 23, 2013

Hocam orada address'in 0 olup olmadigini kontrol ettiriyorum. Aslinda address.length ya da address.sizeof iste bu boyutu ariyorum.

Aslinda C kodu soyleydi

if (bind(create_socket, (struct sockaddr *) &address, sizeof(address)) == 0){
     printf("Binding Socket\n");
  }

Benim tek hata aldigim nokta bu. Butun kodu cevirdim :)

Belirtilen hata aldigim satiri kullanmasam

import std.stdio;
import std.c.stdlib;
import std.c.windows.winsock;
import std.c.windows.windows;
import std.c.windows.stat;
import std.c.windows.com;
import std.socket;
import core.memory;
import core.sys.posix.netinet.in_;
import core.sys.posix.arpa.inet;
import core.sys.posix.unistd;
import core.sys.posix.sys.stat;
import core.sys.posix.sys.types;

/*
* import core.sys.posix.sys.socket;
* import core.sys.posix.netinet.tcp;
  import core.sys.posix.net.if_;
 */



void main()
{
	int create_socket, new_socket;
	socklen_t addrlen;
	int bufsize = 1024;

	char * buffer = (cast(char*)malloc(bufsize));


	if((create_socket == socket(AF_INET, SOCK_STREAM, 0)) > 0)
	{
		writeln("The socket was created\n");
	}


	sockaddr_in address;

	address.sin_family = AF_INET;
	address.sin_addr.s_addr = INADDR_ANY;
	address.sin_port = htons(8080);


	/*if (bind(create_socket, cast(sockaddr *) &address, address == 0))
	{
		writeln("Binding Socket\n");
	}*/

	while (1) {
		if (listen(create_socket, 10) < 0) {
			perror("server: listen");
			exit(1);
		}

		if ((new_socket = accept(create_socket, cast(sockaddr *) &address, &addrlen)) < 0) {
			perror("server: accept");
			exit(1);
		}

		if (new_socket > 0){
			printf("The Client is connected...\n");
		}

		recv(new_socket, buffer, bufsize, 0);
		writeln("%d\n", buffer);
		write(new_socket, "hello world\n", 12);
		close(new_socket);
	}
	close(create_socket);
	//return 0;

}

server: listen: No error

hata aliyorum. burada return degerinin 0 donduruldugu nokta da hatali ama kullanmayinca da hata vermiyor

--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]

August 23, 2013

Alıntı (agora):

>
> if (bind(create_socket, sok.sokad, &soc.address, sizeof(soc.address) == 0))
> ```


D'de .sizeof bir niteliktir: soc.address.sizeof.

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
August 23, 2013

Alıntı (agora):

>
> 	if (bind(create_socket, cast(sockaddr *) &address, address == 0))
> ```

Orada parantezlere dikkat. Herhalde bind'ın döndürdüğü değerin 0 olduğuna bakıyorsun, değil mi? address==0 yapınca address sıfırsa true diye bir değer elde ediyorsun.

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]
August 23, 2013

Alıntı (agora):

>

Hocam orada address'in 0 olup olmadigini kontrol ettiriyorum.

Öyle bir denetim istediğinden emin misin? C kodu öyle yapmıyor örneğin.

Alıntı:

>

Aslinda C kodu soyleydi

>  if (bind(create_socket, (struct sockaddr *) &address, sizeof(address)) == 0){
>       printf("Binding Socket\n");
>    }
> ```


Daha önce de söylediğim gibi, parantezlere dikkat. ;) Dikkat edersen, 0 ile karşılaştırılan bind'ın dönüş değeri...

Ali

-- 
[ Bu gönderi, <http://ddili.org/forum>'dan dönüştürülmüştür. ]