BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ



Benzer belgeler
BLGM 344 DENEY 3 * AĞ PROGRAMLAMAYA GİRİŞ

Soket IPC (bağlantı doğrultusunda olan istemci and sunucu operasyonları) Sunucu. İstemci. socket() Bir soket yarat. bind()

Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş. Internet Protokolleri ve Ağ Uygulamaları. Internet Protokolleri Üzerinden İletişim

Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş

Bölüm 28 ve 29 : İstemci Sunucu Etkileşimi ve Soket API sine Giriş. Internet Protokolleri ve Ağ Uygulamaları. Internet Protokolleri Üzerinden İletişim

Ayni sistem(host) üzerinde IPC. Ağ(network) aracılığı ile IPC

Görsel Programlama DERS 12. Görsel Programlama - Ders12/

Bir port aynı anda bir process tarafından dinlenebilir. Fakat bir process birden fazla portu dinleyebilir.

Toplu İleti Gönderimi

DM-501 Tak-Çalıştır GPRS-UART Köprüsü

Web Sunucusu BLGM 344 Bilgisayar Ağları Proje. BLGM 344 Proje 1* WEB SUNUCUSU UYGULAMASI

Karadeniz Teknik Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü Bilgisayar Sistemleri Laboratuarı ĐSTEMCĐ VE SUNUCU MĐMARĐLERĐ

MCR02-AE Ethernet Temassız Kart Okuyucu

Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü. Bilgisayar Ağları Dersi Lab. 2. İçerik. IP ICMP MAC Tracert

Ağ Altyapısı ve Dağıtılmış İşlem

EC-485. Ethernet RS485 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

Ağ Altyapısı ve Dağıtılmış İşlem

Bölüm3 Taşıma Katmanı. Transport Layer 3-1

Gazi Üniversitesi Mühendislik Fakültesi Bilgisayar Mühendisliği Bölümü. Bilgisayar Ağları Dersi Lab. 2

Icerik filtreleme sistemlerini atlatmak icin kullanacağımız yöntem SSH Tünelleme(SSH in SOCKS proxy ozelligini kullanacagiz).

Web Servis-Web Sitesi Bağlantısı


EC-100. Ethernet RS232/422/485 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

Ağ Nedir? Birden fazla bilgisayarın iletişimini sağlayan printer vb. kaynakları, daha iyi ve ortaklaşa kullanımı sağlayan yapılara denir.

Öğrenciler için Kablosuz İnternet Erişimi (Wi-Fi) Kullanım Kılavuzu

Zilabs VoIP uygulaması için ADSL Ayarları

SSH Tünelleme ile İçerik Filtreleyicileri Atlatmak

BQ Modbus Analog Giriş Kartı 6 Kanal 4 20mA. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

Ortam İzleyici Kullanım Kılavuzu

Coslat Monitor (Raporcu)

HACETTEPE ÜNİVERSİTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ BİLGİSAYAR AĞLARI LABORATUVARI DENEY 5. Yönlendiricilerde İşlem İzleme ve Hata Ayıklama

Temel Giriş/Çıkış Fonksiyonları

Kurumsal Güvenlik ve Web Filtreleme

Saldırı Tespit ve Engelleme Sistemleri Eğitimi Ön Hazırlık Soruları

NJ İLE UDP/IP ÜZERİNDEN SOKET SERVİS. 1) Soket Servis 2) Soket Servis Ayarları 3) Soket Servis Komutları 4) Örnek Uygulama 5) Multiway


Virtual Router Redundancy Protocol (VRRP)

Kurumsal Güvenlik ve Web Filtreleme

Bölüm 12: UDP ve TCP UDP (User Datagram Protocol)

SAKARYA ÜNİVERSİTESİ BİLGİSAYAR VE BİLİŞİM BİLİMLERİ FAKÜLTESİ BİLGİSAYAR MÜHENDİSLİĞİ BÖLÜMÜ GÜZ DÖNEMİ PROGRAMLAMAYA GİRİŞ DERSİ

VPN NEDIR? NASıL KULLANıLıR?

Ağınız üzerinde tarama yapmak için Web Hizmetleri'ni kullanma (Windows Vista SP2 veya üzeri, Windows 7 ve Windows 8)

DHCP kurulumu için Client/Server mimarisine sahip bir ağ ortamı olmalıdır ki bu da ortamda bir Domain Controller olmasını zorunlu kılar.

Kets DocPlace LOGO Entegrasyonu

BIL411 - BİLGİSAYAR AĞLARI LABORATUVARI

EC-232C. Ethernet RS232 Çevirici. İstanbul Yazılım ve Elektronik Teknolojileri

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

BM 402 Bilgisayar Ağları (Computer Networks)

ETHERNET TEKNOLOJİSİ

FIRAT ÜNİVERSİTESİ BİLGİSAYAR MÜH.

Bilin tarafından verilen Kullanıcı Adı ve Şifresini bu alanlara giriniz. Bilin Yazılım ve Bilişim Danışmanlığı Ltd. Şti.

WiFi RS232 Converter Sayfa 1 / 12. WiFi RS232 Converter. Teknik Döküman

BQ Modbus Analog Giriş Kartı 6 Kanal PT100 - PT1000. Kullanım Kılavuzu. Doküman Versiyon: BQTEK

Bay.t Destek. İnternetten Uzak Erişim. Kullanım Klavuzu

KÜTÜPHANE KAYNAKLARINA DIŞARIDAN (PROXY SUNUCU KULLANARAK) BAĞLANMAK İÇİN YAPILMASI GEREKENLER A. INTERNET EXPLORER KULLANICILARI İÇİN;

COM API v.1.1 BELGE SÜRÜMÜ : 1.1

TCP / IP NEDİR? TCP / IP SORUN ÇÖZME

Wolvox Kapı Ekranı. AKINSOFT Wolvox Kapı Ekranı Yardım Dosyası. Doküman Versiyon :

ELN1002 BİLGİSAYAR PROGRAMLAMA 2

Doğru Adaptor soket kutuplaması.

FTP ve Güvenlik Duvarları

AĞ HİZMETLERİ. Öğr.Gör.Volkan ALTINTAŞ. Version 4.0

PARALOG POS AKTARIMLARI. Derece Yazılım 2009

Hızlı Kurulum Rehberi. ASUS AAM6030BI ADSL 4 Port Modem

Connection Manager Kullanım Kılavuzu

YENİ NESİL 720 SÜRÜMÜ e-irsaliye DEĞİŞİKLİKLERİ

icono Kullanıcı Kılavuzu

Bilgisayar Sistemleri ilk ortaya çıktığında...

Fiery Command WorkStation 5.8 ile Fiery Extended Applications 4.4

Dünyanın bilgisine açılan pencere... Ya da sadece yeni çağın eğlencesi...

Wireshark Lab.: DNS. 1. nslookup

5651 ve 5070 Sayılı Kanun Tanımlar Yükümlülükler ve Sorumluluklar Logix v2.3 Firewall. Rekare Bilgi Teknolojileri

MV3 FATURA RADYOLOJİ KULLANIM KILAVUZU


NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 6. Yrd.Doç.Dr.Hacer Karacan

Bilgisayarların birbirine bağlanması ve bir ağ oluşturmasının temel amacı veri alışverişi yapabilmekti. Yani bir nevi haberleşmeyi sağlamaktı.

Laboratuvar Çalışması Konak Bilgisayarları Bağlama ve Yapılandırma

İNTERNET VE BİLGİ AĞLARININ KULLANIMI

Scream! e gelen veri akışlarından bazılarını diğer bir kurum yada bilgisayarla paylaşmak için kullanılabilir.

WorkFlow. dinamo Work Flow

Aktif Dizin Logon/Logoff Script Ayarları Versiyon

ALGORİTMA VE PROGRAMLAMA II

BIL411 - BİLGİSAYAR AĞLARI LABORATUVARI

COM API v2.0 Belge sürümü : 2.0.3

C dilinde if-else yapısı

Öğrencilerin Canlı derslere katılması, * Sisteme giriş

BOTAN SMS APİ DÖKÜMANI. Versiyon 1.0

Hot Standby Router Protocol (HSRP)

AĞ TEMELLERİ 4.HAFTA CELAL BAYAR ÜNİVERSİTESİ AKHİSAR MESLEK YÜKSEKOKULU

SERNET ET232CAS x2 RS232 Seri Kanal Sunucu KULLANICI KILAVUZU. Telif Hakkı Uyarısı. >>> Otomasyon Ürünleri

Bu ekrana Kullanıcı adı ve şifre ile giriş yapıldığında ekranda giriş yapabilmeniz için yetki almanız

PERGO TAKİP VE GÜVENLİK SİSTEMLERİ

Örnek bir kullanım ve bilgisayar ağlarını oluşturan bileşenlerin özeti

mod ile açılacak olan dosyanın ne amaçla açılacağı belirlenir. Bunlar:

Google Chrome Kullanıyorsanız; Microsoft Internet Explorer Kullanıyorsanız;

MODBUS GATEWAY KONFİGÜRASYON YAZILIMI

BİH 605 Bilgi Teknolojisi Bahar Dönemi 2015

SERNET ET485CAS x2 RS485/RS422 Seri Kanal Sunucu KULLANICI KILAVUZU. Telif Hakkı Uyarısı. >>> Otomasyon Ürünleri

Doğrudan Borçlanma Sistemi

Transkript:

BLGM 343 DENEY 8 * TCP İLE VERİ İLETİŞİMİ Amaçlar 1. TCP protokolünün öğrenilmesi 2. Ağ programlamada kullanacağımız sistem komutlarının öğrenilmesi 3. Ağ programlamanın kavranması TCP ile veri alışverişi TCP bağlantı tabanlı bir protokoldür, yani, istemci sunucuya bağlanır ve bu bağlantı sağlandıktan sonra veri transferi başlayabilir. TCP bağlantılarında istemci ve sunucunun gerçekleştireceği adımlar farklıdır. Ağ tabanlı veri transferi yapılabilmesi için öncelikle bir soket açılması (socket()), sonra da bu soketi bir kapı numarasına (port number) bağlanması (bind()) gerekmektedir. İstemcinin yapacağı işlemler sunucuya göre daha basittir. Önceden bahsettiğimiz gibi bir kapı numarasına bağlı bir soket oluşturulması gerekmektedir. Ancak buradaki kapı numarası önemsiz olduğu için işletim sistemine bırakılabilir. Böylece işletim sistemi tarafından bu sokete rastgele bir kapı numarası atanır. Daha sonra bu soket kullanılarak, sunucuya bağlantı sağlanabilir (connect()). Sunucuya bağlanabilmek için sunucunun IP adresini ve kapı numarasını bilmemiz gerekmektedir. Eğer belirtilen adreste istenen kapı numarasını kullanan bir sunucu yoksa, bağlantı çağrısı hata verecektir. Sunucu soketi oluşturduktan sonra bu soketi istemci tarafından da bilinen bir kapı numarasına bağlar. Sunucu bağlantıları kabul edeceğini dinle çağrısıyla (listen()) belirtir. Bu işlemin ardından istemci sunucuya bağlanabilir, ancak, veri transferinin başlayabilmesi için sunucunun isteği kabul etmesi gerekmektedir (accept()). Kabul etme işlemi başarılı olursa yeni bir soket yaratarak sunucuyla istemci arasında veri transferinin başlayabilmesini sağlar. Bağlantı bekleyen soket hala * BLGM 343 dersi için Güz 2013/2014 döneminde Gürcü Öz ve Cem Kalyoncu tarafından hazırlanmıştır 1

açık ve bağlantı bekleme durumundadır, ve istenirse bir başka istemcinin bağlantı isteği de kabul edilebilir. Aynı anda birden fazla istemciye yanıt vermek için, sunucu birden fazla işlem (fork()) veya iş parçası (pthread) kullanabilir. Sunucu veya istemci, bağlantı sağlandıktan sonra veri gönderebilir (send()) veya alabilir (recv()). Veri transferini veya dinleme işlemini sonlandırmak için kapat (close()) çağrısı kullanılabilir. socket() socket() sistem çağrısına iki parametre ile istenilen soket tipi belirtilir. Internet Protocol için AF_INET, TCP (Transmission Control Protocol) bağlatısı için SOCK_STREAM (akış soketi) kullanılması gerekmektedir. Eğer döndürülen değer negatifse, bir hata çıktığını belirtmektedir. Eğer herhangi bir sorun yoksa bu sistem çağrısı soket tanımlayıcısı döndürülür. Örnek: int soket = socket(af_inet, SOCK_STREAM, 0); bind() bind() sistem çağrısı verilen soket tanımlayıcısını verilen yerel adres ve kapı numarasına bağlar. Parametre olarak önce soket tanımlayıcısı, sonra yerel adres tanımlayıcısı (protokol, adres ve kapı numarasını içerir) ve soket adres tanımlayısıcının boyutunu kabul eder. Soket adres tanımlayıcı olarak sockaddr_in (soket adresi, internet) kullanacağız. Adres veya kapı numarası bizim için önemli değilse INADDR_ANY değerini kullanabiliriz. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. En sık karşılaşılan hata belirtilen kapının numarasının kullanılıyor olmasıdır. Eğer close() çağrısı kullanılmamışsa, bir program kapandıktan bir süre sonra o programın kullandığı kapı numarası serbest duruma düşer. struct sockaddr_in yerel = {AF_INET, INADDR_ANY, INADDR_ANY}; bind(soket, &yerel, sizeof(sockaddr_in)); Sunucuda INADDR_ANY yerine htons(kapı numarası) kullanılmalıdır. connect() connect() sistem çağrısı belirtilen adrese bağlantı sağlar. Yalnızca bağlantı tabanlı iletişim 2

sistemlerinde kullanılır. Sunucunun bilgileri bind() sistem çağrısındaki gibi sockaddr_in veri yapısı kullanılarak sağlanır, ancak, sunucunun bilgileri tam olarak verilmelidir. INADDR_ANY connect() ile kullanılamaz. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. Genel olarak üç hata karşımıza çıkar: hedef bilgisayarın adı/ip'si yanlış olabilir, belirtilen kapı numarası yanlış ya da bu kapıyı dinleyen bir program olmayabilir, son olarak da bilgisayarın güvenlik duvarı bağlantıya engel olmaktadır. struct sockaddr_in sunucu = {AF_INET, htons(80), inet_addr("194.27.78.195")}; connect(soket, &sunucu, sizeof(sockaddr_in)); listen() listen() sistem çağırısı verilen soketin bağlantı kabul ettiğini belirtir. İlk parametre soketin kendisi, ikinci ise aynı anda kaç bağlantı isteğinin beklemede olacağını belirtir. Genelde bağlantı isteği geldiğinde kısa süre içerisinde kabul edileceğinden, küçük bir değerin kullanılması herhangi bir sorun yaratmayacaktır. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. listen(soket, 5); accept() accept() çağrısı gelen bir bağlantı isteğini kabul etmek için kullanılır. Bu çağrı bir bağlantı isteği yoksa bağlantı gelinceye kadar bekler. Bu çağrının kullanılabilmesi için listen() sistem çağrısının bu soket üzerinde çağırılmış olması gerekmektedir. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. Çağrı başarılı olursa, yeni oluşturduğu soketi geri döndürecektir. İstemciyle bu soketi kullanarak iletişim sağlamanız gerekmektedir. Orijinal soket hala bağlantı beklemeye devam edecektir. Ayrıca accept() çağrısı gelen bağlantı hakkındaki bilgileri de sockaddr_in yapısıyla bize iletir. int uzunluk=sizeof(struct sockaddr_in); struct sockaddr_in istemcibilgisi; int istemci = accept(soket, (struct sockaddr *)&istemcibilgisi, &uzunluk); 3

send() TCP bağlantısı sağlamış olan bir soket kullanılarak karşıdaki bilgisayara veri gönderilebilir. Bu işlem için send() çağrısı kullanılmalıdır. send() çağrısı, kullanılacak olan soketi, gönderilecek veriyi, verinin uzunluğunu ve gönderim ayarlarını parametre olarak alır. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. Eğer gönderim başarılıysa gönderilen veri miktarını geri döndürür. Gönderilen veri miktarı göndermek istenilen veriden az olabilir. Bu durumda kalan veri bir başka çağrıyla tekrar gönderilmelidir. Örnek: char data[]="merhaba"; int gonderilen = send(soket, data, strlen(data)+1, 0); recv() recv() sistem çağrısı TCP bağlantısı üzerinden veri okumak için kullanılır. Kullanılacak soketi, doldurulacak veri alanını, bu alanın büyüklüğünü ve ayarları parametre olarak alır. Eğer bekleyen veri yoksa bu çağrı veri gelene kadar bekler. Birden fazla send() çağrısıyla gönderilen veriler recv() ile okunurken birleşik de okunabilir. Bu sebepten, okunan verinin birden fazla paket içerip içermediğinin kontrol edilmesi gerekebilir. Çağrı esnasında hata çıkarsa sonuç olarak -1 döndürülür. Eğer çağrı başarılıysa okunan verinin boyutunu verir. Not: gönderilen veride dizgi sonu yoksa, alınan veriye otomatik olarak eklenmez. Bu yüzden gerektiği durumlarda okunan verinin sonuna '\0' karakterini yerleştirmeniz gerekebilir. char buf[1024]; int alinan = recv(soket, buf, 1024, 0); close() Açılan bir soket bağlantısı close() kullanarak kapatılabilir. Parametre olarak soket tanımlayıcısını alır. 4

Deney Bu deneyde basit bir sunucu/istemci yazmanız istenmektedir. Sunucu istemci bağlantısı geldiği zaman sunucuya: Merhaba, isminiz nedir mesajını göndermeli. Daha sonra sunucudan veri isteyerek, gelen veriyi: Merhaba, [gelen veri] şeklinde istemciye geri göndermelidir. Aşağıda sunucunun yapması gereken adımlar listelenmiştir: 1. Soket oluştur (socket()) ve yerel bağlantısını yap (bind()) 2. Gelen bağlantıları bekle (listen()) 3. Bağlantı kabul et (accept()) 4. İstemciye veri gönder (send()) 5. İstemciden veri al (recv()) 6. Gelen veriyi Merhaba, yazısıyla birleştir (strcat) 7. İstemciye veriyi gönder (send()) 8. Bağlantıyı kapat (close()) ve çık (return) İstemci sunucuya bağlanmaya çalışmalı. Daha sonra sunucunun gönderdiği veriyi ekrana yazmalı. Bunun ardından kullanıcıdan bir yazı okuyarak bunu sunucuya göndermeli. Daha sonra sunucudan gelen veriyi göstererek soketi kapatıp çıkmalı. Aşağıda gerçekleştirilmesi gereken adımlar listelenmiştir: 1. Soket oluştur (socket()) ve yerel bağlantısını yap (bind()) 2. Sunucuya bağlan (connect()) 3. Sunucudan veri oku (recv()) 4. Okunan veriyi ekrana yaz (printf) 5. Kullanıcıdan veri oku (scanf) 6. Kullanıcıdan okunan veriyi sunucuya gönder (send()) 7. Sunucudan gelen veriyi oku (recv()) 8. Bağlantıyı kapat (close()) ve çık (return) Ek çalışmalar 1. Sunucunun birden fazla isteğe cevap vermesini sağlayınız. 2. Sunucunun aynı anda birden fazla isteğe cevap vermesini sağlayınız. 5