winsock ile chat programı bukadar zor olmamalı!!!

Başlatan EMG81, 16 Ocak 2011, 03:37:47

EMG81

microsoft winsock control 6.0 kompanenti ile visual studio 2010 da sabahtan akşama kadar denemeler yaptım ama 2 bilgisayar arasında local ağda chat programı tarzında ki programımı çalıştıramadım.

http://rapidshare.com/files/442750724/Aae__Baae_lantae_sae__Deneme.rar

iyildirim

Hala 2008 kaldığım için ancak kodlara notepat ile bakabildim.
Gördüğüm kadarı ile göndermek gönderici kısmı ile ilgili yazılmış kodlar var. dinleyici ile ilgili birşey yok. (form olarak göremediğimi belirtmiştim.) tek bir makinada geliştirme yapıyorsan önerim gönderici ve dinleyici için iki ayrı winsock komponent kullanman yada gönderici ve dinleyici için iki ayrı form da geliştirmen .
local port sadece dinleyen için önemli. göndericinin local portu 0 olabilir. 

Dinleyen winsock'a local port ataması yapıp bind etmeli ve dinlemesini söylemelisin. Bu da formun load eventinde yapılmalı.
        AxWinsock1.LocalPort = 1001 
        AxWinsock1.Listen()

şeklinde

dinleyiciye connection request  geldiğinde  connection_request eventinde gelen requestID yi de kullanıp bağlantı isteği kabul edilmeli.
    Private Sub AxWinsock1_ConnectionRequest(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_ConnectionRequestEvent) Handles AxWinsock1.ConnectionRequest

        If AxWinsock1.CtlState <> MSWinsockLib.StateConstants.sckConnected Then
            AxWinsock1.Close()
        End If

        AxWinsock1.Accept(e.requestID)
    End Sub

Göndericinin connect ve send kısımları yazdığın gibi, oralarda  sorun  yok.
Bilgi alınması kısmı dinleyicinin  dataarrival event'ine yazılacak.
    Private Sub AxWinsock1_DataArrival(ByVal sender As Object, ByVal e As AxMSWinsockLib.DMSWinsockControlEvents_DataArrivalEvent) Handles AxWinsock1.DataArrival
 
       Dim strData As Object
        AxWinsock1.GetData(strData)
    End Sub


Sanırım bu kadar.
Komponent isimleri vs. örneklerde hatalı olabilir. gereken düzenlemeleri yaparsın.
Kolay gelsin.

EMG81

Yanıtınız için çok teşekkür ederim... Evet sonunda yaptım. Fakat şimdide şöyle bir sorun varki 3 bilgisayarım var demiştim ya, 2 bilgisayar yazışma yaparken birisi bağıntısını kopartıp 3. pc ye bağlanınca sorun oluyor. yani textbox1.text (ip adresi girilen text) in olduğu satır hata veriyor. bağıntıyı Normal bir şekilde koparıp başka ip ye nasıl bağlanabilirim ?

iyildirim

Hata tam olarak nedir anlayamadım.
winsock.close bağlantıyı koparır, kapatır. bu durumda da karşı tarafta close event'inin tetiklenmesi gerekir. winsock ile çalışırken her türlü metedu çalıştırmadan önce .state'e bakılmalı.

Anladığım kadarı ile TCP kullanarak iki bilgisayar konuşabiliyor.
İzninizle önerim asıl amaç olan bilgisayarın adının diğer bilgisayarlarda görünmesini sağlamaya çalışmak olacak.
Bunun için; her iki kontrolun özelliklerinden protokol UPD seçilmeli. UDP protokolünde bir bağlantı yapmak gerekmiyor. Remotehost olarak subnet'in broadcast adresini tanımlayın. (192.168.1.255 gibi) Sonra sadece datayı gönderin.
Hoşçakalın

EMG81

dediklerinizi yaptığımda form load daki dinleyicinin axwinsock1.listen()  komutunda hata oluşuyor...

iyildirim

Kusura bakmayın, eksik yazmışım.  listen kullanmadan deneyin. gerekirse local port uygulamanıza reserve etmek için bind kullanın.


Digimensch

Bu winsock compenentinin c# icin de  versionu varmi?
Yada ayni compenent c# icinde kullanilabilnirmi? Evet ise hangi compenenti yani hangi dll?
sizin uygulamanizda iki tane dll gördüm
AxInterop.MSWinsockLib.dll
ve
Interop.MSWinsockLib.dll
hangisi?

EMG81

listen kullanmadan deneme yaptım ve çalışmadı... Bind hakkında pek bir bilgim yok .. Sizden rica etsem saatte geç oldu ama Bu konuyu biraz açabilirmisiniz ?