PC ile robot kolu kontrolü step motorlar c++ yazılım

| Mayıs 12, 2023 Tarihinde güncellendi
PC ile robot kolu kontrolü step motorlar c++ yazılım

BÖLÜM 3. UZAKTAN ERİŞİM

Winsock Object Kullanarak Socket Programlama: Projedeki programlar TCP/IP protokolüyle haberleşecektir. ” Microsoft Winsock Control”, iki program arasında haberleşmeyi sağlayan VB componentidir.

Winsock Object Temel Method’lar ve Property’ler

Winsock Objesinin en çok kullanılan metodları şunlardır;

Accept: Gelen bağlantıları kabul etmek için kullanılır
Listen: Belirli bir portta dinlemede kalmak için kullanılır
Connect: Belirli bir ip’ye, belirli bir porttan bağlanmak için kullanılır.
Close: Socketi kapatır.
LocalHostName: Yerel Bilgisayar adı (bkz Denetim Masası->Ağ->Tanımlama)
LocalIp: O anki Ip numaranız
RemoteHost: Bağlanmak istediğiniz bilgisayarın ip numarası veya domain name’i
LocalPort: Yerel port
RemotePort: Bağlanılmak istenen makinenin port numarası

Event’ ler

Close: Socket kapatılırken oluşur.

Connect: Socket karsı bilgisayara bir bağlantı gerçekleştirirse oluşur. Burada ilginç bir nokta vardır. Karsı taraf sizin bağlantı isteğinizi kabul veya ret etmeden önce aslında sizin bilgisayarını da bir connect event’ i oluşur. Bu da socket uygulamalarında bir takım problemler oluşturuyor.

ConnectionRequest: Bilgisayarınıza başka bir makineden bağlantı isteği geldiğinde oluşur.
DataArrival: bilgisayarınıza veri yollandığında oluşur.
Error: Scokette hata olması durumunda bu event çalışır
SendComplete: Yollama işlemi tamamlandığında..
SendProgress: Yollama işlemi devam ederken.

Socket Durumları

Bir socket 10 durumda bulunabilir. Socket’ in o anki durumu State isimli property ile öğrenilebilir.
Socketimizin adi winsock1 olsun;

Winsock1.state = 0 ise socket kapalı durumda
Winsock1.state = 1 ise Acık durumda
Winsock1.state = 2 ise Belirli bir porttan dinleme (Listen State)
Winsock1.state = 3 ise Bağlantıda belirsizlik var
Winsock1.state = 4 ise Karşı bilgisayar bulunuyor
Winsock1.state = 5 ise Karşı bilgisayar bulundu
Winsock1.state = 6 ise Bağlanılıyor
Winsock1.state = 7 ise Bağlanıldı
Winsock1.state = 8 ise Karşı taraf bağlantıyı kesiyor
Winsock1.state = 9 ise Hata oluştu

Bir socketi dinlemeye almak ve gelen bağlantıları kabul/ret etmek
Örnek bir VB kodu;

Private Sub Form_Load()
Winsock1.LocalPort = 15000 '15000 numaralı port
Winsock1.Listen 'Bu porttan dinlemede kal
Txt_localip.text = Winsock1.LocalIP 'Kendi ip numaramızı textbox'a yazdırıyoruz
End Sub

Şimdi şu kodu inceleyelim. Bir bağlantı gelmiş ve connectionRequest Event’ i otomatik olarak oluşmuş ve bizim daha önceden yazdığımız kod otomatik olarak işletilecek;

Private Sub Winsock1_ConnectionRequest(ByVal requestID As Long)
Dim cevap
ziyaretçi = Winsock1.RemoteHostIP
DoEvents
cevap = MsgBox ( ziyaretçi+ " isimli bilgisayardan bağlanma isteği geldi. Kabul ediyor musunuz?", vbYesNo + vbQuestion)
If cevap = vbYes Then 'Kabul ediyorsak
If Winsock1.State <> sckClosed Then Winsock1.Close 'burası çok önemli
'bir socket listen state'ti ise, close edilmeden
'accept state'e geçirilemez.
Winsock1.Accept (requestID) 'Bağlantıyı kabul ettik, RequestID event'in parametresi
Txt_remoteip.text = Winsock1.RemoteHostIP 'Karşı tarafın ip numarasını textbox a yaz.
Else 'Kabul etmiyorsak
Winsock1.Close 'Socketi kapat
Winsock1.LocalPort = 15000 'Daha sonra gelecek istekler için tekrar aç
Winsock1.Listen 'Dinlemede kal
End If
End Sub

Bilgisayarınızda 65535 adet port bulunur ve bunlardan 1000′ in altındakiler işletim sistemi tarafından kullanılır. İşimizi şansa bırakmayıp genelde programdaki port numaralarını 10000 ve ustu olarak seçelim. Su ana kadar sadece bir socket yarattık ve onu 15000 numaralı porttan dinlemeye aldık.

Bir Socket İle Belirli Bir Port’a Bağlanmak

Aşağıdaki kodu inceleyelim;

Private Sub btn_baglan_Click()
Winsock2.RemoteHost = txt_remoteip.text '212.23.23.3 gibi bir ip ya da irc.xnet.org gibi bir adres
Winsock2.RemotePort = 15000 'Karşı tarafın port numarası.. Bağlanabilmek için karşı taraf bu porttan
'dinlemede olmalıdır.
Winsock2.Connect 'Bağlan
End Sub

Bundan sonra sizin bilgisayarınızda Connect isimli Event oluşurken, karşı tarafta ise ConnectionRequest isimli event oluşur. Ama o sizin bağlantınızı kabul etmese bile sizde Connect Event’ i oluşacaktır. Basit nuke programları Connect Event’ i oluşur oluşmaz bu eventin içinden illegal data yollamaya başlarlar. Eğer bu portlardan (mesela 139) dinlemede kalan ve gelen bağlantıları ret eden bir program yazarsanız, karşı tarafın nuke programı hata verecektir. Eğer daha kotu bir programcı tarafından yazıldıysa çökecektir.

Data Yollamak

Aşağıdaki kodu inceleyelim,

Diyelim ki bir düğmeye bastınız ve karşı tarafa bir cümle yollamak istiyorsunuz;

If Winsock2.State <> sckConnected Then 'Eğer socket connect olmamışsa
Winsock2.Close 'socketi kapat
MsgBox "karşı tarafa bağlı değilsiniz"
Exit Sub
End If
If Trim(txt_mesaj.text) <> "" Then 'Eğer textbox bos değilse
mesaj = "<" + isim + "> " + txt_mesaj.text + Chr(10) 'irc tipinde bir mesaj formatı hazırla
Winsock2.SendData (mesaj) 'Yolla
End If

Bunu yaptığınızda sizin bilgisayarınızda SendProgress ve SendComplete Event’leri oluşurken, karşı tarafta DataArrival Event’ i oluşur.

Data Almak

Bilgisayarımıza karşı taraftan data geldiğinde DataArrival Event’ i oluşur.

Private Sub Winsock1_DataArrival(ByVal bytesTotal As Long)
Dim msg_al As String
Winsock1.GetData msg_al, vbString, bytesTotal 'vbString mesajın tipini temsil eder
Txt_ekran.text=Txt_ekran.text+msg_al
End Sub

Bu kodla da data alınıyor ve ekrana yazdırılıyor. Ancak önümüze her gelen datayı böyle almamalıyız. En basitinden mesajın uzunluğunu kontrol etmek gerekebilir.

TCP/IP Port Numaraları Ve Karşılıkları

Not: Bu bilgiler Windows 98 işletim sisteminin service adlı dosyasından alınmıştır

# Copyright (c) 1993-1995 Microsoft Corp.
#
# This file contains port numbers for well-known services as defined by
# RFC 1060 (Assigned Numbers).
#
# Format:
#
#
/
[aliases...]   [#]
#

echo                7/tcp
echo                7/udp
discard             9/tcp    sink null
discard             9/udp    sink null
systat             11/tcp
systat             11/tcp    users
daytime            13/tcp
daytime            13/udp
netstat            15/tcp
qotd               17/tcp    quote
qotd               17/udp    quote
chargen            19/tcp    ttytst source
chargen            19/udp    ttytst source
ftp-data           20/tcp
ftp                21/tcp
telnet             23/tcp
smtp               25/tcp    mail
time               37/tcp    timserver
time               37/udp    timserver
rlp                39/udp    resource      # resource location
name               42/tcp    nameserver
name               42/udp    nameserver
whois              43/tcp    nicname       # usually to sri-nic
domain             53/tcp    nameserver    # name-domain server

#
/
[aliases...]   [#]

domain             53/udp    nameserver
nameserver         53/tcp    domain        # name-domain server
nameserver         53/udp    domain
mtp                57/tcp                  # deprecated
bootp              67/udp                  # boot program server
tftp               69/udp
rje                77/tcp    netrjs
finger             79/tcp
link               87/tcp    ttylink
supdup             95/tcp
hostnames         101/tcp    hostname      # usually from sri-nic
iso-tsap          102/tcp
dictionary        103/tcp    webster
x400              103/tcp                  # ISO Mail
x400-snd          104/tcp
csnet-ns          105/tcp
pop               109/tcp    postoffice
pop2              109/tcp                  # Post Office
pop3              110/tcp    postoffice
portmap           111/tcp
portmap           111/udp
sunrpc            111/tcp
sunrpc            111/udp
auth              113/tcp    authentication
sftp              115/tcp
path              117/tcp
uucp-path         117/tcp
nntp              119/tcp    usenet        # Network News Transfer
ntp               123/udp    ntpd ntp      # network time protocol (exp)
nbname            137/udp
nbdatagram        138/udp
nbsession         139/tcp
NeWS              144/tcp    news
Sgmp              153/udp    sgmp
tcprepo           158/tcp    repository    # PCMAIL
snmp              161/udp    snmp
snmp-trap         162/udp    snmp
print-srv         170/tcp                  # network PostScript
vmnet             175/tcp
load              315/udp
vmnet0            400/tcp

#
/
[aliases...]   [#]

sytek             500/udp
biff              512/udp    comsat
exec              512/tcp
login             513/tcp
who               513/udp    whod
shell             514/tcp    cmd           # no passwords used
syslog            514/udp
printer           515/tcp    spooler       # line printer spooler
talk              517/udp
ntalk             518/udp
efs               520/tcp                  # for LucasFilm
route             520/udp    router routed
timed             525/udp    timeserver
tempo             526/tcp    newdate
courier           530/tcp    rpc
conference        531/tcp    chat
rvd-control       531/udp    MIT disk
netnews           532/tcp    readnews
netwall           533/udp                  # -for emergency broadcasts
uucp              540/tcp    uucpd         # uucp daemon
klogin            543/tcp                  # Kerberos authenticated rlogin
kshell            544/tcp    cmd           # and remote shell
new-rwho          550/udp    new-who       # experimental
remotefs          556/tcp    rfs_server rfs# Brunhoff remote filesystem
rmonitor          560/udp    rmonitord     # experimental
monitor           561/udp                  # experimental
garcon            600/tcp
maitrd            601/tcp
busboy            602/tcp
acctmaster        700/udp
acctslave         701/udp
acct              702/udp
acctlogin         703/udp
acctprinter       704/udp
elcsd             704/udp                  # errlog
acctinfo          705/udp
acctslave2        706/udp
acctdisk          707/udp
kerberos          750/tcp    kdc           # Kerberos authentication--tcp
kerberos          750/udp    kdc           # Kerberos authentication--udp
kerberos_master   751/tcp                  # Kerberos authentication

#
/
[aliases...]   [#]

kerberos_master   751/udp                  # Kerberos authentication
passwd_server     752/udp                  # Kerberos passwd server
userreg_server    753/udp                  # Kerberos userreg server
krb_prop          754/tcp                  # Kerberos slave propagation
erlogin           888/tcp                  # Login and environment passing
kpop             1109/tcp                  # Pop with Kerberos
phone            1167/udp
ingreslock       1524/tcp
maze             1666/udp
nfs              2049/udp                  # sun nfs
knetd            2053/tcp                  # Kerberos de-multiplexor
eklogin          2105/tcp                  # Kerberos encrypted rlogin
rmt              5555/tcp    rmtd
mtb              5556/tcp    mtbd          # mtb backup
man              9535/tcp                  # remote man server
w                9536/tcp
mantst           9537/tcp                  # remote man server, testing
bnews           10000/tcp
rscs0           10000/udp
queue           10001/tcp
rscs1           10001/udp
poker           10002/tcp
rscs2           10002/udp
gateway         10003/tcp
rscs3           10003/udp
remp            10004/tcp
rscs4           10004/udp
rscs5           10005/udp
rscs6           10006/udp
rscs7           10007/udp
rscs8           10008/udp
rscs9           10009/udp
rscsa           10010/udp
rscsb           10011/udp
qmaster         10012/tcp
qmaster         10012/udp

Yayım tarihi: 2008/01/12 Etiketler: , , , , , , ,



10 Yorum “PC ile robot kolu kontrolü step motorlar c++ yazılım

  1. emreemre

    hocam bu kadar güzel bir kaynağı paylaştığınız için gerçekten yürekten teşekkür ediyorum.

    CEVAPLA
  2. Cengiz GuvenCengiz Guven

    Yaptığın ve paylaştığın projeye göz attım. Hocam bir çok kaynaktan yararlanarak toparlamışsın emeğin için tşk ederiz. Benim gibi bu işe merak sarmış ve yeni başlayan arkadaşlar için büyük bir imkan. Çok Tşk ediyorum tekrar. Izmir/ Bornova

    CEVAPLA
  3. kemal guvenlikemal guvenli

    oldukça basit yerine kullanımı oldukça basit desek:)

    CEVAPLA
  4. MUSTAFA  (  azimci_55@hotmail.com )MUSTAFA ( [email protected] )

    Emeğe saygı hocam ilerleyen günlerde size ulaşma imkanı bulabilirim inşallah ben bitirme tezi olarak aldım bu konuyu ve suan için pek fazla bilgiye sahip değilim iyi günler

    CEVAPLA
  5. oem.upp,ramoem.upp,ram

    gerçekten güzel ama benim merak ettigim kendi bilgisayarımızda kac tane acık port var ve bunları nasıl buluruz trojenlerdemi portları acıyor bunları merak ediyorum birde kendimizde portları acacak bir prg yazabilirmiyiz bu yazdıgımız portlar bir link yardımı ile acabilirmi veya virüslere takılırmı

    CEVAPLA
  6. erkuterkut

    hocam gayet anlaşılır ve basit anlatmışsın.
    Elinize sağlık.

    CEVAPLA
  7. Koral OrelKoral Orel

    hocam emeğinize sağlık Allah razı olsun uzun zamandır yazılarınızı takip ediyorum sayenizde 1 7D sinema (8kişilik) 1 cnc router (250×180) imal ettim şimdi sayenizde üretim bantı kurmayı hedefliyorum

    CEVAPLA

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir