0Pricing
Lua Academy · Ders

TCP Temelleri

Bağlanıp veri gönderin.

TCP Temelleri, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.

LuaSocket Nedir?

LuaSocket, Lua için fiilî ağ kitaplığıdır. Ham TCP ve UDP soketlerinin yanı sıra HTTP, SMTP ve FTP için daha üst düzey yardımcılar sunar.

Harici bir C modülüdür; bu nedenle standart Lua'nın parçası değildir. LuaRocks aracılığıyla yükleyip require ile yüklemelisiniz.

Bu kurstaki kod parçalarının hiçbiri, ağla iletişim kurdukları için basit bir çalışma alanında çalışmaz.

local socket = require("socket")
print(socket._VERSION)

TCP Soketi Oluşturma

Temel nesne, socket.tcp() ile oluşturulan TCP ana soketidir. Yeni oluşturulan ana soket bağlantısız ve bağlanmamış durumdadır.

Bir ana soketten connect kullanarak onu istemci nesnesine dönüştürebilir veya bind+listen kullanarak sunucu nesnesine dönüştürebilirsiniz.

Çoğu çağrı ya bir değer ya da nil ile birlikte bir hata dizesi döndürür; bu nedenle her ikisini de daima yakalayın.

local socket = require("socket")
local tcp, err = socket.tcp()
if not tcp then error(err) end

Adres Ailesi

TCP, IPv4 veya IPv6 üzerinden çalışır. socket.tcp() adres ailesini gerektiğinde seçerken socket.tcp4() ve socket.tcp6() belirli bir aileyi zorunlu kılar.

Açık bir denetim gerekiyorsa bağlanmadan önce bir ana bilgisayar adını sayısal adrese çözümlemek için socket.dns.toip(host) kullanın.

local socket = require("socket")
local ip, info = socket.dns.toip("example.com")
print(ip)

Bir Konağa Bağlanma

conn:connect(host, port) TCP'nin üç aşamalı el sıkışmasını gerçekleştirir. Başarılı olduğunda 1, başarısız olduğunda ise nil ve "connection refused" veya "timeout" gibi bir hata iletisi döndürür.

Kolaylık sağlayan socket.connect(host, port) işlevi, tek bir çağrıda soket oluşturup bağlanır.

local socket = require("socket")
local conn, err = socket.connect("example.com", 80)
if not conn then print("failed:", err) end

Veri Gönderme

conn:send(data) sokete bayt yazar. Gönderilen son baytın indisini döndürür. Engellemeli bir sokette bu genellikle data değerinin tam uzunluğudur.

TCP bir ileti protokolü değil, bayt akışıdır; bu nedenle tek bir send çağrısı ağ üzerinden bölünebilir veya başka verilerle birleştirilebilir. İletileriniz için çerçevelemeyi kendiniz yapmalısınız.

local request = "GET / HTTP/1.0\r\n\r\n"
local sent, err = conn:send(request)
print("bytes sent:", sent)

Veri Alma

conn:receive(pattern) akıştan okur. Varsayılan "*l" deseni, satır sonu karakteri olmadan bir satır okur. "*a" ise bağlantı kapanana kadar okur.

Belirli sayıda bayt okumak için bir sayı da aktarabilirsiniz. Hata durumunda nil, bir hata dizesi ve alınan kısmi verileri döndürür.

local line, err = conn:receive("*l")
local chunk = conn:receive(512)
local all = conn:receive("*a")

Bağlantıyı Kapatma

İşiniz bittiğinde dosya tanımlayıcısını serbest bırakmak ve bir TCP FIN göndermek için daima conn:close() çağrısını yapın.

Karşı tarafın yanıtını okumaya devam ederken akışın sonunu bildirmek için conn:shutdown("send") ile bağlantıyı tek yönlü kapatabilirsiniz. Bu, "*a" kullanan istek/yanıt protokolleri için kullanışlıdır.

conn:shutdown("send")
local reply = conn:receive("*a")
conn:close()

Zaman Aşımları Önemlidir

Varsayılan olarak soketler süresiz şekilde engellenir. conn:settimeout(seconds) bir çağrının ne kadar bekleyeceğini sınırlar. 0 değeri soketi engellemesiz yapar.

Zaman aşımı gerçekleştiğinde çağrı nil ve "timeout" dizesini döndürür. Yanıt vermeyen bağlantılardan kaçınmak için üretim ortamında daima bir zaman aşımı ayarlayın.

conn:settimeout(5)
local data, err = conn:receive("*l")
if err == "timeout" then print("too slow") end

TCP ve UDP

TCP bağlantı odaklı, sıralı ve güvenilirdir: El sıkışmalar ve yeniden iletimler karşılığında baytlar bir kez ve sıralı olarak ulaşır.

UDP (socket.udp()) bağlantısız ve güvenilmezdir, ancak ek yükü düşüktür; telemetri veya oyunlar için uygundur. Bu kursta HTTP'nin temelini oluşturduğu için TCP'ye odaklanılmaktadır.

Kısmi Gönderimler ve Döngüler

Engellemesiz soketlerde send arabelleğinizin yalnızca bir bölümünü iletebilir. İşlem, nil, "timeout" ve şimdiye kadar yazılan son baytın dizinini döndürür.

Sağlam bir gönderici, tüm arabellek boşaltılana kadar son gönderilen baytı izleyen bayttan devam ederek döngüye girer.

local i = 1
while i <= #data do
  local sent, err, last = conn:send(data, i)
  i = (sent or last) + 1
  if err and err ~= "timeout" then break end
end

Bağlantıyı İnceleme

conn:getpeername() uzak IP'yi ve portu, conn:getsockname() ise yerel ucu döndürür. Bunlar günlük kaydı ve hata ayıklama için kullanışlıdır.

conn:setoption("keepalive", true) ve conn:setoption("tcp-nodelay", true) temel soketin davranışını ayarlar.

local ip, port = conn:getpeername()
print("connected to", ip, port)
conn:setoption("tcp-nodelay", true)

Hızlı Kontrol

TCP alma semantiği anlayışınızı sınayın.

Özet

LuaSocket'in TCP ana nesnesini tanıdınız; soketleri oluşturmayı, bağlamayı, veri göndermeyi, veri almayı ve kapatmayı öğrendiniz; zaman aşımlarının ve yarı kapatmanın davranışı nasıl şekillendirdiğini gördünüz.

TCP'nin bir bayt akışı olduğunu, her çağrının nil, err döndürebileceğini ve üretim ortamındaki bir soketin her zaman zaman aşımı ayarlaması gerektiğini unutmayın. Sırada bu parçaları çalışan bir istemcide birleştireceksiniz.

Sıkça Sorulan Sorular

“TCP Temelleri” dersi ücretsiz mi?

Evet — “TCP Temelleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.

“TCP Temelleri” dersinde ne öğreneceğim?

Bağlanıp veri gönderin. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Lua Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 1. dersidir.

“TCP Temelleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. TCP Temelleri
  2. İstemci Oluşturma
  3. Sunucu Oluşturma
  4. HTTP İstekleri
← Lua Academy Sayfasına Dön