Tweet

Ana Sayfa   Forum   C , C++
Yeni Başlık Cevap Ekle
white_bullet C ile Telnet tabanlı Sunucu Oluşturma (17/02/2009 03: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);
}
}



just code it!

Üye Profili

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (07/06/2009 10: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 11: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>>>

just code it!

profil

white_bullet Re:C ile Telnet tabanlı Sunucu Oluşturma (21/05/2010 04: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 05:48)
profil Oguzz
 offline OFFLINE
 Senior Coder

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

just code it!

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

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