Tweet

Ana Sayfa   Forum   C , C++
Yeni Başlık Cevap Ekle
white_bullet C ile Telnet tabanlı Sunucu Oluşturma (17/02/2009 02:13)
profil Oguzz
 offline OFFLINE
 Senior Coder

Socket Programlama


Uygulama süresince ilk önceliğimiz 2222 nolu port üzerinden çalışan bir sunucu programı oluşturmak olacak..

Kullanılan dil: C

Neyin nasıl oluşturulduğunu ilgili kodlarını vererek yazıyorum.Komple source en sonda vericem..

Port numarasının belirlenmesi :



CODE:

#define PORT 2222


Socket Oluşturma:

CODE:
int socx;

socx=socket(AF_INET,SOCK_STREAM,0) ;
if (socx<0)
{
perror("Soketi oluşturamadık hata var");
exit(1);
}

Socket oluşturmada kullanılan fonksiyonumuz;



CODE:
int socket(int domain,int type, int protocol);

Şimdi bind() fonksiyonu ile soketi verilen soket isimle ilişkilendirip local adress atamasını yapalım..



CODE:
if(bind(socx,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
perror("bind");
exit(1);
}

Şimdi socketi dinleyelim..



CODE:
if (listen(socx,BACKLOG)==-1)
{
perror("listen");
exit(1);
}

Sunucunun Çalıştığı Pc'nin Adres bilgilerini Çekelim..



CODE:
#define PORT 2222


CODE:
struct sockaddr_in server_addr; /* Burada serverın adres bilgileri */

server_addr.sin_family=AF_INET; /* Adress Family burası */
server_addr.sin_port=htons(PORT); /*Port Number burası */
server_addr.sin_addr.s_addr=INADDR_ANY; /* IP Number buda */

Sunucuya bağlananların adresini nasıl tespit ederiz??



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

Bağlantıyı Kabul Edelim



CODE:
thecoders:~> telnet thecoders.net 2222

Örneğin böyle bir komut verirsek programımız çalışır..

Accept fonksiyonu ile adresi tespit ettik bunu kabul etme sürecinde çağırarak kullanıcaz..



CODE:
int cx, client_size;
struct sockaddr_in client_addr; /* Client'in adres bilgisi burda */
client_size = sizeof(struct sockaddr_in);
cx=accept(socx,(struct sockaddr*)&client_addr,&client_size));
printf("&s sunucuya bağlı. n",inet_ntoa(Client_addr.sin_addr));

Data Gönderelim..

send istersek write kullanabiliriz.Biz Send kullanarak devam edelim..



CODE:
int send(int s,const void *msg, int len,unsigned int flags);

Bu basit sunucu uygulaması üzerine client yazılabilir veri alınması aşaması o kısımda yazılabilir.Bir sonraki konudada ona giriş yapmak üzere kolay gelsin herkeze..

Print versiyonunu vereyim unutmadan..

CODE:
server.c -
/* oguz-coder */
/* thecoders */


#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>

#define PORT 2222 /* PORT Number*/

main(int argc, char *argv[])
{
int socx, cx;
struct sockaddr_in server_addr, client_addr;
int client_size;
char mesaj[32];

printf("%s %d nolu portunuz uzerinde calisiyor...n",argv[0],PORT);

if ((socx = socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("Error : socket");
exit(1);
}

server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(PORT);
server_addr.sin_addr.s_addr = INADDR_ANY;

if (bind(socx, (struct sockaddr *)&server_addr, sizeof(struct sockaddr)) == -1)
{
perror("Error : bind");
exit(1);
}

if (listen(socx, 1) == -1)
{
perror("Error : listen");
exit(1);
}

while(1)
{
client_size = sizeof(struct sockaddr_in);
if ((cx = accept(socx, (struct sockaddr *)&client_addr, &client_size)) == -1)
{
perror("Error : accept");
continue;
}

printf("%s sunucumuza baglandi...n",inet_ntoa(client_addr.sin_addr));

strcpy(mesaj,"Sunucuya bağlandın...n");

if (!fork())
{
if (send(cx,mesaj,sizeof(mesaj), 0) == -1) perror("Error : send");
close(cx);
exit(0);
}

close(fd);

while ( waitpid(-1,NULL,WNOHANG) > 0);
}
}



[IMG SRC="http://i27.tinypic.com/deo945.jpg" ALIGN="CENTER"]http://i27.tinypic.com/deo945.jpg[/IMG]


Üye Profili

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (07/06/2009 09:28)
profil zione
 offline OFFLINE
 New Coder

slm Oguzz
öncelikle anlatımın için cok sagol iyi bi calısma olmus..
benım takıldıgım kodu puty de derleyemedim 3 error verdi
server_.c:127: error: âfdâ undeclared (first use in this function)
server_.c:127: error: (Each undeclared identifier is reported only once
server_.c:127: error: for each function it appears in.)
ayrıca ben dosya transferi yapmak istiyorum udp ile soket programlamada nasıl yapacagımhakkında bilgi veriri misin

profil

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (07/06/2009 10:55)
profil Oguzz
 offline OFFLINE
 Senior Coder

İyi günler öncelikle. Udp protokolü üzerinden dosya transferi için size örnek kod veriyorum.İncelerseniz sorunuza yanıt bulabilirsiniz.Yukarıdaki anlatımda işlemleri gerçekleştiren kodları verdim.Ben problem yaşamadım açıkçası.(linux'da)

Buyrun download linki

<<<İndir>>>

[IMG SRC="http://i27.tinypic.com/deo945.jpg" ALIGN="CENTER"]http://i27.tinypic.com/deo945.jpg[/IMG]


profil

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (21/05/2010 03:53)
profil _RoNiN_
 offline OFFLINE
 New Coder

udp file transfer kodu için verdiğini linki yeniler misiniz.

profil

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (21/05/2010 04:48)
profil Oguzz
 offline OFFLINE
 Senior Coder

Konu üstünden zaman geçmiş proje dosyası bende yok o yüzden ekleyemicem malesef..

[IMG SRC="http://i27.tinypic.com/deo945.jpg" ALIGN="CENTER"]http://i27.tinypic.com/deo945.jpg[/IMG]


profil
 
1 /
 
Ana Sayfa   Forum   C , C++
Yeni Başlık Cevap Ekle
 

Advertisement


MENÜ » FORUM
Menü » Takip et
RSS Facebook Twitter Friendfeed
Sık Kullanılanlar Google Yahoo Live
Menü » Paylaş
E-Posta ile gönder Twitter Facebook Friendfeed
Buzz Stumbleupon Delicious Digg