{"id":1406,"date":"2019-09-29T18:15:41","date_gmt":"2019-09-29T18:15:41","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=1406"},"modified":"2019-09-29T18:15:41","modified_gmt":"2019-09-29T18:15:41","slug":"qt-tcp-sunucu-uygulamasi-bcom-serisi-4","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/","title":{"rendered":"QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 4)"},"content":{"rendered":"<p>Evet QT ser\u00fcvenimize devam ediyoruz arkada\u015flar. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz:<\/p>\n<ul>\n<li><span style=\"color: #339966;\"><strong><a style=\"color: #339966;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\">Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f<\/a><\/strong><\/span><\/li>\n<li><span style=\"color: #339966;\"><a style=\"color: #339966;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\"><strong>QT (B\u00c7OM Serisi &#8211; 2)<\/strong><\/a><\/span><\/li>\n<li><span style=\"color: #339966;\"><strong><a style=\"color: #339966;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\">QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi \u2013 3)<\/a><\/strong><\/span><\/li>\n<\/ul>\n<p>Bir \u00f6nceki yaz\u0131mda sizler ile QT kullanarak, yaz\u0131l\u0131msal olarak bir TCP soket istemci uygulamas\u0131 payla\u015fm\u0131\u015ft\u0131m. O yaz\u0131da, QT API&#8217;si kullanarak, Grafiksel Kullan\u0131c\u0131 Aray\u00fcz\u00fcn\u00fc kod i\u00e7erisinden nas\u0131l olu\u015fturabilece\u011fimize bakm\u0131\u015ft\u0131k. Ayn\u0131 zamanda QT kullanarak a\u011f\/soket programlamaya da de\u011finmi\u015ftim. Bu yaz\u0131mda da, bu istemci uygulamas\u0131 ile haberle\u015febilecek olan, yine QT ile geli\u015ftirilmi\u015f QT sunucu test uygulamas\u0131n\u0131 payla\u015faca\u011f\u0131m. Bir \u00f6nceki uygulamadan farkl\u0131 olarak bu yaz\u0131l\u0131mdaki GKA bile\u015fenlerini Visual Studio i\u00e7erisinden QT Designer kullanarak geli\u015ftirdim (bu eklentiyi kurmak ve daha fazla bilgi edinmek i\u00e7in ilk yaz\u0131ma bakabilirsiniz). Bu vesile ile h\u0131zl\u0131ca QT designer&#8217;a da de\u011finece\u011fim.<\/p>\n<p>Yaz\u0131l\u0131ma ili\u015fkin \u00f6rnek ekran g\u00f6r\u00fcnt\u00fcs\u00fcne a\u015fa\u011f\u0131da:<\/p>\n<p id=\"BeSqMRh\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1409 aligncenter\" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba.png\" alt=\"\" width=\"454\" height=\"439\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba.png 677w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba-300x290.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba-500x484.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba-150x145.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba-400x387.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b678533ba-200x194.png 200w\" sizes=\"auto, (max-width: 454px) 100vw, 454px\" \/><\/p>\n<p>Ekran g\u00f6r\u00fcnt\u00fcs\u00fcne bakt\u0131ktan sonra art\u0131k yaz\u0131l\u0131ma g\u00f6z atabiliriz. \u00d6ncelikli olarak yaz\u0131l\u0131m\u0131n sahip oldu\u011fu kabiliyetleri k\u0131saca s\u0131ralamak gerekirse:<\/p>\n<ul>\n<li>Geli\u015ftirdi\u011fimiz &#8220;NetworkLibrary&#8221; ve &#8220;CommonUI&#8221; alt yap\u0131s\u0131n\u0131 kullanmakta,<\/li>\n<li>Verilen port u dinleyerek, birden fazla istemci uygulamas\u0131n\u0131n ba\u011flanmas\u0131na olanak sa\u011flamakta,<\/li>\n<li>ASCII ve binary veri giri\u015fine ve g\u00f6nderilmesine (ayr\u0131 bir QT bile\u015feni olarak) olanak sa\u011flamakta,<\/li>\n<li>Mesaj boyutu belirleme, sonuna yeni sat\u0131r ekleyebilmekte,<\/li>\n<li>B\u00fct\u00fcn istemciler ile olan haberle\u015fmenin g\u00f6r\u00fcnt\u00fclenmesi, kaydedilmesine olanak sa\u011flamakta,<\/li>\n<li>\u0130stemciye \u00f6zel mesajlar\u0131 filtreleme, sadece ilgili istemciye mesaj g\u00f6nderme ya da ilgili istemci ile olan ba\u011flant\u0131n\u0131n kopar\u0131lmas\u0131,<\/li>\n<li>Kaynak kod doxygen format\u0131na g\u00f6re dok\u00fcmante edilmi\u015f durumda(Doc\\Doxygen\\html dizini alt\u0131nda).<\/li>\n<\/ul>\n<h2><span style=\"color: #0000ff;\"><strong>Proje Yap\u0131s\u0131na \u0130li\u015fkin G\u00fcncellemeler<\/strong><\/span><\/h2>\n<p>\u00d6ncelikli olarak bir \u00f6nceki istemci yaz\u0131l\u0131m\u0131nda geli\u015ftirmi\u015f oldu\u011fumuz, ortak haberle\u015fme k\u00fct\u00fcphanesi ve GKA bile\u015fenlerini ayr\u0131 bir projeye ta\u015f\u0131d\u0131m. Bu tarz birden fazla projede kullanmay\u0131 planlad\u0131\u011f\u0131n\u0131z kabiliyetleri ayr\u0131 projelerde tutmak, hem yeni geli\u015ftirme eforunuzu hem de bak\u0131m maliyetlerinizi d\u00fc\u015f\u00fcrecektir. Bu anlamda iki ek projemiz oldu:<\/p>\n<ul>\n<li><strong>CommonUILibrary<\/strong>\n<ul>\n<li>Bu proje statik k\u00fct\u00fcphane projesi olarak olu\u015fturuldu,<\/li>\n<li>Her iki uygulamada da kullanm\u0131\u015f oldu\u011fumuz IP adresi g\u00f6rsel bile\u015feni ve \u00e7ok ama\u00e7l\u0131 veri giri\u015f bile\u015fenleri bulunuyor,<\/li>\n<li>Bu bile\u015fenlere ili\u015fkin GKA&#8217;y\u0131 VS i\u00e7erisinde .ui dosyalar\u0131na t\u0131klayarak g\u00f6rebilir ve de\u011fi\u015ftirebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li><strong>NetworkLibrary<\/strong>\n<ul>\n<li>As\u0131l a\u011f haberle\u015fmesi ile ilgili olan s\u0131n\u0131flar\u0131 i\u00e7eren projemiz bu,<\/li>\n<li>Temel olarak istemci TCP ve sunucu TCP alt s\u0131n\u0131flar\u0131 bulunuyor,<\/li>\n<li>Bu s\u0131n\u0131flar, arka tarafta QT taraf\u0131ndan sunulan QT soket s\u0131n\u0131flar\u0131n\u0131 kullan\u0131yor olsa da, a\u011f haberle\u015fme kabiliyetini daha h\u0131zl\u0131 ve kolay kullanabilmeniz ad\u0131na bir tak\u0131m eklentiler i\u00e7ermektedir. Bunlar\u0131n bir k\u0131sm\u0131na bu yaz\u0131m\u0131n ilerleyen ba\u015fl\u0131klar\u0131nda de\u011finmeye \u00e7al\u0131\u015faca\u011f\u0131m.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Projenin VS i\u00e7erisinde genel g\u00f6r\u00fcn\u00fcm\u00fc a\u015fa\u011f\u0131daki gibidir:<\/p>\n<p id=\"TpScNmh\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1408 aligncenter\" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b4f41f9a2.png\" alt=\"\" width=\"320\" height=\"893\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b4f41f9a2.png 340w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b4f41f9a2-107x300.png 107w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b4f41f9a2-150x419.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b4f41f9a2-200x558.png 200w\" sizes=\"auto, (max-width: 320px) 100vw, 320px\" \/><\/p>\n<p>Bu arada projeyi olu\u015ftururken, ya\u015fad\u0131\u011f\u0131n\u0131z hatalar\u0131 yorumlar arac\u0131l\u0131\u011f\u0131 ile bildirebilirsiniz. Bir \u00f6nceki istemci yaz\u0131s\u0131ndaki \u00f6nerilere de g\u00f6z atmay\u0131 unutmay\u0131n\u0131z.<\/p>\n<p>Projenin g\u00fcncel haline a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/p>\n<p><a href=\"https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine\"><strong><span style=\"color: #339966;\">https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine<\/span><\/strong><\/a><\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Qt UI Designer<\/strong><\/span><\/h2>\n<p>Gelelim QT UI designer&#8217;a. Sunucu uygulamas\u0131na ili\u015fkin GKA bile\u015fenlerinin tamam\u0131n\u0131 bu arac\u0131 kullanarak geli\u015ftirdim. B\u00fct\u00fcn bu GKA bile\u015fenlerine, QTServerTestApp projesi alt\u0131nda bulunan\u00a0QTServerTestApp.ui dosyas\u0131na \u00e7ift t\u0131klayarak ula\u015fabilirsiniz. Bu dosyaya \u00e7ift t\u0131klad\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi bir g\u00f6r\u00fcnt\u00fc g\u00f6rmenizi bekliyorum:<\/p>\n<p id=\"RUVynHM\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1411 aligncenter\" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a.png\" alt=\"\" width=\"1019\" height=\"582\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a.png 1461w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-300x171.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-768x439.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-1024x585.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-500x286.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-150x86.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-1200x686.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-400x229.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-800x457.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90b9e45ce3a-200x114.png 200w\" sizes=\"auto, (max-width: 1019px) 100vw, 1019px\" \/><\/p>\n<p>H\u0131zl\u0131ca bu ara\u00e7 ile yapabileceklerinize de\u011finelim. Ben burada en \u00f6nemli oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm hususlara de\u011finece\u011fim, daha detayl\u0131 bilgi i\u00e7in arac\u0131n sayfas\u0131na\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/qtdesigner-manual.html\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/qtdesigner-manual.html<\/strong><\/span><\/a> ba\u015fvurabilirsiniz. \u015eimdi madde madde bakal\u0131m:<\/p>\n<ul>\n<li><strong>Alan 0:<\/strong>\n<ul>\n<li>Bu k\u0131s\u0131mda dosya men\u00fcs\u00fc ve ara\u00e7 \u00e7ubu\u011fu bulunmakta,<\/li>\n<li>Dosya men\u00fcs\u00fc yan\u0131nda, widget d\u00fczenleme, sinyal\/slot ayarlamalar\u0131, se\u00e7im s\u0131ralamas\u0131 (tab order), yerle\u015fim ayarlamalar\u0131 ve &#8220;buddy editing&#8221; diye bir se\u00e7enek bulunmakta,<\/li>\n<li>Yerle\u015fim ayarlamalar\u0131:\n<ul>\n<li>QT ile GKA geli\u015ftirirken iyi \u00f6\u011frenmeniz gereken konulardan birisi de yerle\u015fim d\u00fczenleri &#8220;layout&#8221;&#8216;lard\u0131r. Bunlara ne kadar a\u015fina olursan\u0131z o kadar kolay bir GKA uygulamas\u0131 geli\u015ftirebilirsiniz.<\/li>\n<li>Ne t\u00fcr se\u00e7enekleriniz oldu\u011funu d\u00fc\u011fmelerden ve 1. paneldeki bile\u015fenlerden g\u00f6rebilirsiniz. Bunlardan en s\u0131k kullanacaklar\u0131n\u0131z yatay\/dikey yerle\u015ftirme, \u0131zgara yerle\u015ftirme olacak. Bu yaz\u0131mda bunlar\u0131n detay\u0131na girmeyece\u011fim, ba\u015fka bir yaz\u0131da bunlara bakar\u0131z. Merak edenler i\u00e7in\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/designer-layouts.html#\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/designer-layouts.html#<\/strong><\/span><\/a> g\u00fczel bir kaynak.<\/li>\n<li>Burada bulunan a\u015fa\u011f\u0131daki ikon da mevcut se\u00e7ili yerle\u015fimi iptal etmek i\u00e7in kullan\u0131l\u0131r.\n<p id=\"jiqGBfU\"><img loading=\"lazy\" decoding=\"async\" width=\"28\" height=\"27\" class=\"alignnone size-full wp-image-1412 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/09\/img_5d90bc5ad52bc.png\" alt=\"\" \/><\/p>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Alan 1 (&#8220;Widget Box&#8221;):<\/strong>\n<ul>\n<li>Bu alan, uygulamalar\u0131n\u0131z\u0131n GKA&#8217;lar\u0131n\u0131 olu\u015fturmak i\u00e7in ihtiya\u00e7 duyaca\u011f\u0131n\u0131z temel bile\u015fenleri i\u00e7ermektedir,<\/li>\n<li>Bu bile\u015fenlerin bir \u00e7o\u011fu, gerekli kabiliyetleri ger\u00e7eklemek \u00fczere \u00e7e\u015fitli servisler ve sinyal\/slot&#8217;lar sunmaktad\u0131rlar,<\/li>\n<li>Bunlar\u0131n her biri i\u00e7in Qt Assistant ya da ilgili \u00e7evrim i\u00e7i sayfaya ba\u015fvurabilirsiniz, hatta \u00e7ok\u00e7a ba\u015fvurmal\u0131s\u0131n\u0131z \ud83d\ude42<\/li>\n<li>A\u015fa\u011f\u0131daki gibi grupland\u0131r\u0131lm\u0131\u015ft\u0131r:\n<ul>\n<li>Yerle\u015fim d\u00fczenleri (&#8220;Layouts&#8221;)\n<ul>\n<li>Yukar\u0131da bahsetmi\u015ftim, genel olarak GKA bile\u015fenlerinin yerle\u015ftirilmesi i\u00e7in kullan\u0131lan d\u00fczenlemeler,<\/li>\n<\/ul>\n<\/li>\n<li>Ay\u0131ra\u00e7lar (&#8220;Spacers&#8221;)\n<ul>\n<li>Yerle\u015fim d\u00fczenleri ile birlikte, bile\u015fenler aras\u0131na yatay ve dikey bo\u015fluk b\u0131rakmak i\u00e7in kullan\u0131l\u0131rlar,<\/li>\n<\/ul>\n<\/li>\n<li>D\u00fc\u011fmeler (&#8220;Buttons&#8221;)\n<ul>\n<li>\u0130sminden de anla\u015f\u0131laca\u011f\u0131 \u00fczere t\u0131klanarak etkile\u015fime girilen temel bile\u015fenleri i\u00e7erir,<\/li>\n<\/ul>\n<\/li>\n<li>Madde Tabanl\u0131 G\u00f6r\u00fcn\u00fcmler (&#8220;Item Views (Model-Based&#8221;)\n<ul>\n<li>Bu grup alt\u0131nda, liste ve tablo benzeri veri s\u0131ralama ve g\u00f6r\u00fcnt\u00fcleme i\u00e7in kullan\u0131lacak bile\u015fenler s\u0131ralanmaktad\u0131r,<\/li>\n<li>&#8220;Item Widgets&#8221; grubundaki bile\u015fenlerden bunlar\u0131n fark ise, bu bile\u015fenlerin QT&#8217;nin &#8220;Model-View&#8221; yakla\u015f\u0131m\u0131na, asl\u0131nda temel olarak &#8220;Model-View-Controller&#8221; yakla\u015f\u0131m\u0131na, uyumlu olmal\u0131d\u0131r. Bu sebeple, bunlar\u0131n kullan\u0131m\u0131, di\u011fer grubunkilere tercih edilmelidir,<\/li>\n<li>Bu konu ile ilgili daha detayl\u0131 bilgi i\u00e7in\u00a0<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/model-view-programming.html\">https:\/\/doc.qt.io\/qt-5\/model-view-programming.html<\/a> <\/span><\/strong>adresine g\u00f6z at\u0131labilir,<\/li>\n<\/ul>\n<\/li>\n<li>Madde Tabanl\u0131 Bile\u015fenler (&#8220;Item Widgets (Item-Based&#8221;)\n<ul>\n<li>Verilerin g\u00f6sterilmesi i\u00e7in kullan\u0131lacak olan bile\u015fenler<\/li>\n<\/ul>\n<\/li>\n<li>Konteynerler (&#8220;Containers&#8221;)\n<ul>\n<li>Di\u011fer bile\u015fenleri, pencere i\u00e7erisinde grupland\u0131rmak i\u00e7in kullan\u0131labilecek bile\u015fenlerdir,<\/li>\n<\/ul>\n<\/li>\n<li>Girdi Bile\u015fenleri (&#8220;Input Widgets&#8221;)\n<ul>\n<li>Kullan\u0131c\u0131dan farkl\u0131 girdileri almak i\u00e7in kullan\u0131labilecek olan bile\u015fenlerdir,<\/li>\n<\/ul>\n<\/li>\n<li>G\u00f6r\u00fcnt\u00fcleme Bile\u015fenleri (&#8220;Display Widgets&#8221;)\n<ul>\n<li>Madde tabanl\u0131 bile\u015fenlerin yan\u0131nda, veri g\u00f6r\u00fcnt\u00fclemek i\u00e7in kullan\u0131labilecek bile\u015fenlerdir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<li><strong>Alan 2:<\/strong>\n<ul>\n<li>Bu alan g\u00f6rsel bile\u015fenlerinizi tasarlad\u0131\u011f\u0131n\u0131z aland\u0131r ve genel yerle\u015fimi g\u00f6rmenizi sa\u011flar,<\/li>\n<li>Nihai g\u00f6r\u00fcn\u00fcm\u00fc g\u00f6rmek i\u00e7in ise dosya men\u00fcs\u00fc alt\u0131nda bulunan &#8220;Form-&gt;Preview&#8221; ve &#8220;Form-&gt;Preview in&#8221; se\u00e7eneklerini kullanabilirsiniz,<\/li>\n<li>Burada k\u0131rm\u0131z\u0131 kutular ile grupland\u0131r\u0131lm\u0131\u015f bile\u015fenler ayn\u0131 yerle\u015fim d\u00fczeni i\u00e7erisinde olan bile\u015fenlerdir,<\/li>\n<li>Bile\u015fenleri bir yerle\u015fim d\u00fczenine dahil etmek i\u00e7in bunlar\u0131 pencere i\u00e7erisine koyup daha sonra Ctrl ile \u00e7oklu se\u00e7im yapabilirsiniz. Bile\u015fenleri se\u00e7tikten sonra gerek ara\u00e7 \u00e7ubu\u011fundaki d\u00fc\u011fmeleri ya da sa\u011f t\u0131klad\u0131\u011f\u0131n\u0131zda a\u00e7\u0131lan men\u00fcde bulunan &#8220;Lay out&#8221; se\u00e7ene\u011fi ile se\u00e7ti\u011finiz yerle\u015fime dahil edebilirsiniz,<\/li>\n<li>Herhangi bir yerle\u015fime dahil olmayan bile\u015feni se\u00e7ti\u011finizde onu \u00e7evreleyen kutu koyu mavi, dahil olan bile\u015fenler ise a\u00e7\u0131k mavi renkte g\u00f6r\u00fcnecektir,<\/li>\n<li>GKA tasarlarken Ctrl + Z ve Ctrl + Y&#8217;yi kullanmaktan \u00e7ekinmeyin.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Alan 3 (&#8220;Object Inspector&#8221;):<\/strong>\n<ul>\n<li>En \u00e7ok ba\u015fvurdu\u011fum alanlardan birisi de buras\u0131. Pencereye ve i\u00e7erisinde bulunan b\u00fct\u00fcn bile\u015fenler burada, a\u011fa\u00e7 yap\u0131s\u0131ndan g\u00f6sterilmektedir. Yerle\u015fim d\u00fczenleri de burada g\u00f6r\u00fclebilir,<\/li>\n<li>Burada ayr\u0131ca her bir bile\u015fenin ismi ve s\u0131n\u0131f\u0131n\u0131 da g\u00f6rebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Alan 4 (&#8220;Property Editor&#8221;):<\/strong>\n<ul>\n<li>Bu alan i\u00e7erisinde, tasar\u0131m alan\u0131nda mevcut se\u00e7ili g\u00f6rsel bile\u015fene ili\u015fkin \u00f6zellikleri atay\u0131p, de\u011fi\u015ftirebilirsiniz,<\/li>\n<li>Burada alan\u0131n \u00fcst k\u0131sm\u0131nda bulunan filtreleme kutusunu da kullanman\u0131z\u0131 tavsiye ederim,<\/li>\n<li>De\u011fi\u015ftirilen \u00f6zellikler siyah renkte g\u00f6sterilmekte,<\/li>\n<li>Varsay\u0131lan s\u0131ralaman\u0131n yan\u0131nda \u00f6zellikleri isme g\u00f6re de s\u0131ralayabilirsiniz,<\/li>\n<li>Son olarak birden fazla bile\u015feni se\u00e7ti\u011finizde, bu alanda b\u00fct\u00fcn se\u00e7ili elemanlar\u0131n ortak \u00f6zellikleri g\u00f6sterilecektir. Bu sayede birden fazla bile\u015fene ait \u00f6zelli\u011fi bir kerede de\u011fi\u015ftirebilirsiniz.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Alan 5 (&#8220;Action Editor&#8221;):<\/strong>\n<ul>\n<li>Bu alan i\u00e7erisinde, daha \u00f6nce kod i\u00e7erisinde yapm\u0131\u015f oldu\u011fumuz, sinyal\/slot e\u015fle\u015ftirmelerini ve uygulama i\u00e7erisindeki aksiyonlar\u0131 ba\u011flama gibi aktiviteleri ger\u00e7ekle\u015ftirebilirsiniz,<\/li>\n<li>Ayr\u0131ca &#8220;Resource Browser&#8221; k\u0131sm\u0131nda da uyuglama kaynaklar\u0131 y\u00f6netilmektedir.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>Qt UI designer&#8217;a ili\u015fkin anlatacaklar\u0131m \u015fimdilik bu kadar. Daha \u00f6nce de ifade etti\u011fim gibi, bu araca vak\u0131f olman\u0131n en iyi yolu, onu kurcalamak ve bolca kullanmak. \u0130lgili github&#8217;tan kodlar\u0131 \u00e7ekerek kurcalamaya ba\u015flayabilirsiniz.<\/p>\n<p><strong><span style=\"color: #008000;\">https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine<\/span><\/strong><\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Soket Programlamaya Dair Son Notlar<\/strong><\/span><\/h2>\n<p>Evet ba\u015fl\u0131k sizleri yan\u0131ltmas\u0131n, bunlar\u0131 belki de en ba\u015fta anlatmal\u0131yd\u0131m ama kafalarda biraz soru i\u015faretlerinin olu\u015fmas\u0131n\u0131 her zaman haz\u0131r bilgiden daha fazla ye\u011flerim \ud83d\ude42 Ayr\u0131ca, bir \u00f6nceki istemci yaz\u0131mda ifade etti\u011fim gibi, kod i\u00e7erisinde izlenen y\u00f6ntemleri bire bir buraya ta\u015f\u0131mad\u0131m. Ama yaz\u0131m\u0131 sonland\u0131rmadan da, soket tabanl\u0131 yaz\u0131l\u0131m geli\u015ftirirken bir \u00e7ok yaz\u0131l\u0131mc\u0131n\u0131n akl\u0131n\u0131 kurcalayan bir ka\u00e7 konuya burada k\u0131saca de\u011finmek istedim. Bu arada, bu hususlar sadece Qt i\u00e7in ge\u00e7erli de\u011fil, di\u011fer programlama dilleri ve k\u00fct\u00fcphaneleri i\u00e7in de ge\u00e7erlidir.<\/p>\n<ul>\n<li>Soket programlamada kullan\u0131lan haberle\u015fme protokolleri temel olarak TCP (Tansmission Control Protocol) ve UDP (User Datagram Protocol) olarak ikiye ay\u0131rl\u0131r,<\/li>\n<li>Bu iki protokolde IP (Internet Protokol) \u00fczerine kuruludur. \u015eimdi bu iki protokole ili\u015fkin gene\u015f bir tak\u0131m bilgilere bakal\u0131m:\n<ul>\n<li><strong>TCP:<\/strong>\n<ul>\n<li>TCP tabanl\u0131 haberle\u015fme, en yayg\u0131n kullan\u0131lan protokollerden birisidir ve ba\u011flant\u0131 tabanl\u0131 olarak nitelendirilir,<\/li>\n<li>Bu protokolde g\u00f6nderilen paketlerin ayn\u0131 s\u0131rada ula\u015ft\u0131r\u0131laca\u011f\u0131 garanti alt\u0131na al\u0131nm\u0131\u015ft\u0131r,<\/li>\n<li>G\u00f6nderilen veriler hatal\u0131 olma durumuna kar\u015f\u0131 kontrol edilirler, ayr\u0131ca ba\u011flant\u0131 ile ilgili durumdan taraflar haberdar edilirler,<\/li>\n<li>Yukar\u0131da anlat\u0131lanlardan anla\u015f\u0131laca\u011f\u0131 \u00fczere TCP, g\u00fcvenirlik \u00fczerine kurulmu\u015ftur.<\/li>\n<\/ul>\n<\/li>\n<li><strong>UDP:<\/strong>\n<ul>\n<li>UDP, TCP&#8217;den farkl\u0131 olarak, hata durumlar\u0131n\u0131n kontrol\u00fc\u00a0 ya da s\u0131ra kontrol gibi durumlar g\u00f6z ard\u0131 edilir, geli\u015ftiriciye b\u0131rak\u0131l\u0131r,<\/li>\n<li>G\u00f6nderilen paketlerin s\u0131ralamas\u0131 ya da ula\u015f\u0131p\/ula\u015fmad\u0131\u011f\u0131 garantisi verilmez,<\/li>\n<li>UDP genel olarak h\u0131z\u0131n, g\u00fcvenirlikten daha \u00f6nemli oldu\u011fu durumlarda kullan\u0131l\u0131r,<\/li>\n<li>\u00d6rne\u011fin, \u00e7evrim i\u00e7i oyunlar ya da canl\u0131 yay\u0131nlar gibi,<\/li>\n<li>A\u011f\u0131rl\u0131kl\u0131 olarak UDP haberle\u015fmesine, ayr\u0131ca bir TCP kanal\u0131 da e\u015flik eder.<\/li>\n<\/ul>\n<\/li>\n<li>Ayr\u0131ca a\u015fa\u011f\u0131daki resimler de, bu iki protokole ili\u015fkin g\u00fczel bilgiler i\u00e7eriyor:<\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/miro.medium.com\/max\/2322\/1*ni8U_s0qOxilaf61HXeN2w.jpeg\" alt=\"Image result for tcp vs udp\" width=\"346\" height=\"237\" \/><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter\" src=\"https:\/\/www.prometec.net\/wp-content\/uploads\/2019\/06\/TCP-vs-UDP.jpeg\" alt=\"UDP\" width=\"462\" height=\"231\" \/><\/li>\n<\/ul>\n<\/li>\n<li>\u015eimdi gelelim bu iki protokol\u00fcn biz yaz\u0131l\u0131mc\u0131lar a\u00e7\u0131s\u0131ndan bar\u0131nd\u0131rd\u0131\u011f\u0131 hususlara:\n<ul>\n<li>Soketler de dosyalar gibi \u00f6zel bir tan\u0131mlay\u0131c\u0131ya sahiptirler ve bu i\u015fletim sistemi taraf\u0131ndan sa\u011flan\u0131r,<\/li>\n<li>Soketler olu\u015fturulurken her zaman bir port ile ili\u015fkilendirilirler ve ald\u0131klar\u0131 de\u011fer 0-65535 aras\u0131nda de\u011fi\u015fir,<\/li>\n<li>Bir bilgisayar da ayn\u0131 port numaras\u0131nda sahip iki soket olu\u015fturulamaz,<\/li>\n<li>Baz\u0131 uygulamalar, servisler belirli portlar\u0131 kullan\u0131rlar. Soketleri olu\u015ftururken bunlara dikkat etmenizde fayda var. Bunlara bakmak i\u00e7in\u00a0<a href=\"https:\/\/www.webopedia.com\/quick_ref\/portnumbers.asp\"><strong><span style=\"color: #008000;\">https:\/\/www.webopedia.com\/quick_ref\/portnumbers.asp<\/span><\/strong><\/a> adresine g\u00f6z atabilirsiniz,<\/li>\n<li>Sunucu soketler, dinleme i\u015flemini yine belirtilen bu port \u00fczerinden yaparlar ve istemciler de, sunuculara ba\u011flanmak i\u00e7in bu portu kullan\u0131rlar. Birden fazla istemci bu porta ba\u011flan\u0131r,<\/li>\n<li>\u015eimdi gelelim bir milyonluk soruya, ayn\u0131 bilgisayarda ayn\u0131 porta ili\u015fkin birden fazla soket olu\u015fturulam\u0131yorsa, birden fazla istemci nas\u0131l oluyorda bu soketlere ba\u011flan\u0131yor. Hemen a\u00e7\u0131klayal\u0131m,\n<ul>\n<li>Sunucu bir portu dinlemeye al\u0131r,<\/li>\n<li>Bir istemci o porta ba\u011flan\u0131r,<\/li>\n<li>\u0130\u015fletim sistemi o s\u0131rada kullan\u0131lmayan bir portu bu ba\u011flant\u0131 i\u00e7in ay\u0131r\u0131r ve istemci ile olan haberle\u015fme art\u0131k bu port \u00fczerinden yap\u0131l\u0131r (uygulama i\u00e7erisinde <em>IConnectedClient<\/em> s\u0131n\u0131f\u0131 tam da bu ama\u00e7 i\u00e7in olu\u015fturuldu),<\/li>\n<li>\u00d6rne\u011fin 80. portu dinleyen bir sunucuya ba\u011flant\u0131 oldu\u011fu zaman a\u015fa\u011f\u0131daki gibi bir durum ortaya \u00e7\u0131kar:<\/li>\n<li>\n<pre class=\"lang:c++ decode:true\">Local Computer   | Remote Computer           | Role\r\n-----------------------------------------------------------\r\n0.0.0.0:80       | &lt;none&gt;                    | LISTENING\r\n127.0.0.1:80     | 10.1.2.3:&lt;random_port&gt;    | ESTABLISHED<\/pre>\n<p>Burada ifade edilmesi gereken bir di\u011fer durumda, sunucu istemci haberle\u015fmelerinde, genelde istemci i\u00e7in port atamaya ihtiya\u00e7 olmaz (tabi yine de atayabilirsiniz) ve \u00e7o\u011fu Soket API&#8217;si de soket olu\u015ftururken port istemeyen bir aray\u00fcz sunarlar,<\/li>\n<\/ul>\n<\/li>\n<li>UDP&#8217;de ise durum biraz farkl\u0131. Asl\u0131nda bakarsan\u0131z, ben yaz\u0131l\u0131mlar\u0131mda UDP kulland\u0131\u011f\u0131m zaman istemci\/sunucu yerine genelde akran (peer-to-peer) ifadesini kullan\u0131yorum. \u00c7\u00fcnk\u00fc, protokol\u00fcn do\u011fas\u0131 buna daha yatk\u0131n,<\/li>\n<li>UDP&#8217;de herhangi bir ba\u011flant\u0131 olu\u015fturulmaz, fakat veriyi alan taraf gelen paket i\u00e7erisinden, veriyi g\u00f6nderen akrana ili\u015fkin adres bilgilerini temin edebilir (bunun i\u00e7in \u00e7o\u011fu soket k\u00fct\u00fcphanesi API sunmaktad\u0131r).<\/li>\n<li>Bu iki haberle\u015fmeye ili\u015fkin izlenen ad\u0131mlar a\u015fa\u011f\u0131daki fig\u00fcrlerde \u00f6zetlenmektedir:\n<ul>\n<li><em><strong>TCP Sunucu\/\u0130stemci haberle\u015fmesi\u00a0<\/strong><\/em><\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/www.cs.dartmouth.edu\/~campbell\/cs60\/TCPsockets.jpg\" alt=\"PIC\" width=\"427\" height=\"553\" \/><\/li>\n<li><em><strong>UDP haberle\u015fmesi<\/strong><\/em><\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/www.cs.dartmouth.edu\/~campbell\/cs60\/UDPsockets.jpg\" alt=\"PIC\" width=\"460\" height=\"426\" \/><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>&nbsp;<\/p>\n<p>the client does not form a connection with the server like in TCP and instead just sends a datagram. Similarly, the server need not accept a connection and just waits for datagrams to arrive. Datagrams upon arrival contain the address of sender which the server uses to send data to the correct client.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Sonu\u00e7<\/span><\/strong><\/h2>\n<p>Evet arkada\u015flar, bir yaz\u0131m\u0131z\u0131n daha sonuna geldik. Bu yaz\u0131 ile birlikte TCP istemci ve sunucu uygulamalar\u0131m\u0131z\u0131 geli\u015ftirmeyi tamamlad\u0131k. Bundan sonra biraz daha oyunlara y\u00f6nelik geli\u015ftirmeler yaparak devam edece\u011fiz. Bir de ara ara, birim test, s\u00fcrekli entegrasyon gibi konulara de\u011finece\u011fiz. Daha \u00f6nce de ifade etti\u011fim gibi, dodu l\u00fctfen indirin, inceleyin, hunharca de\u011fi\u015ftirin ve kullan\u0131n.<\/p>\n<p>Bu arada bu iki uygulamay\u0131 birle\u015ftirip TCP Soket test uygulamas\u0131 olarak sizler ile payla\u015faca\u011f\u0131m. Tabi bir ka\u00e7 k\u00fc\u00e7\u00fck g\u00fcncelleme ile birlikte \ud83d\ude09<\/p>\n<p>O zamana kadar iyi kodlamalar diliyorum.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">Kaynaklar<\/span><\/strong><\/h2>\n<ul>\n<li><a href=\"https:\/\/www.geeksforgeeks.org\/udp-server-client-implementation-c\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.geeksforgeeks.org\/udp-server-client-implementation-c\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.geeksforgeeks.org\/socket-programming-cc\/\"><span style=\"color: #008000;\"><strong>https:\/\/www.geeksforgeeks.org\/socket-programming-cc\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/notes.shichao.io\/tcpv1\/ch10\/\"><span style=\"color: #008000;\"><strong>https:\/\/notes.shichao.io\/tcpv1\/ch10\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/notes.shichao.io\/tcpv1\/ch12\/\"><span style=\"color: #008000;\"><strong>https:\/\/notes.shichao.io\/tcpv1\/ch12\/<\/strong><\/span><\/a><\/li>\n<li><a href=\"https:\/\/www.cs.dartmouth.edu\/~campbell\/cs60\/socketprogramming.html\"><span style=\"color: #008000;\"><strong>https:\/\/www.cs.dartmouth.edu\/~campbell\/cs60\/socketprogramming.html<\/strong><\/span><\/a><\/li>\n<li><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.webopedia.com\/quick_ref\/portnumbers.asp\">https:\/\/www.webopedia.com\/quick_ref\/portnumbers.asp<\/a><\/span><\/strong><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Evet QT ser\u00fcvenimize devam ediyoruz arkada\u015flar. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi \u2013 3) Bir \u00f6nceki yaz\u0131mda sizler ile QT kullanarak, yaz\u0131l\u0131msal olarak bir TCP soket istemci uygulamas\u0131 payla\u015fm\u0131\u015ft\u0131m. O yaz\u0131da, QT API&#8217;si kullanarak, Grafiksel&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":1308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41],"tags":[13,544,546,353,564,469,493,563,507,471,548,547,561,543,545,562,58],"class_list":["post-1406","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c","tag-client","tag-doxygen","tag-gui","tag-ip","tag-multiplayer","tag-network","tag-protocol","tag-qmake","tag-qt","tag-qt-designer","tag-qt-resource-editor","tag-server","tag-socket-programming","tag-tcp-ip","tag-udp","tag-visual-studio"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet QT ser\u00fcvenimize devam ediyoruz arkada\u015flar. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi \u2013 3) Bir \u00f6nceki yaz\u0131mda sizler ile QT kullanarak, yaz\u0131l\u0131msal olarak bir TCP soket istemci uygulamas\u0131 payla\u015fm\u0131\u015ft\u0131m. O yaz\u0131da, QT API&#8217;si kullanarak, Grafiksel... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-29T18:15:41+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/Qt-e1580417103404.png\" \/>\n\t<meta property=\"og:image:width\" content=\"30\" \/>\n\t<meta property=\"og:image:height\" content=\"23\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"13 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 4)\",\"datePublished\":\"2019-09-29T18:15:41+00:00\",\"dateModified\":\"2019-09-29T18:15:41+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\"},\"wordCount\":2494,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"c++\",\"client\",\"doxygen\",\"GUI\",\"IP\",\"Multiplayer\",\"network\",\"protocol\",\"qmake\",\"Qt\",\"qt designer\",\"qt resource editor\",\"server\",\"socket programming\",\"TCP\/IP\",\"UDP\",\"Visual Studio\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\",\"name\":\"[:tr]QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-09-29T18:15:41+00:00\",\"dateModified\":\"2019-09-29T18:15:41+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 4)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet QT ser\u00fcvenimize devam ediyoruz arkada\u015flar. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131daki ba\u011flant\u0131lardan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi \u2013 3) Bir \u00f6nceki yaz\u0131mda sizler ile QT kullanarak, yaz\u0131l\u0131msal olarak bir TCP soket istemci uygulamas\u0131 payla\u015fm\u0131\u015ft\u0131m. O yaz\u0131da, QT API&#8217;si kullanarak, Grafiksel... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-09-29T18:15:41+00:00","og_image":[{"width":30,"height":23,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/Qt-e1580417103404.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"13 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 4)","datePublished":"2019-09-29T18:15:41+00:00","dateModified":"2019-09-29T18:15:41+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/"},"wordCount":2494,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["c++","client","doxygen","GUI","IP","Multiplayer","network","protocol","qmake","Qt","qt designer","qt resource editor","server","socket programming","TCP\/IP","UDP","Visual Studio"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/","name":"[:tr]QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi - 4)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-09-29T18:15:41+00:00","dateModified":"2019-09-29T18:15:41+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/29\/qt-tcp-sunucu-uygulamasi-bcom-serisi-4\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"QT TCP Sunucu Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 4)"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1406","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1406"}],"version-history":[{"count":11,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1406\/revisions"}],"predecessor-version":[{"id":1428,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1406\/revisions\/1428"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/1308"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1406"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1406"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1406"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}