Tcp Client Baglantı problemi

Başlatan rree, 31 Ocak 2013, 09:05:12

rree

Public Class GetSocket
    Private Tcpclient As New TcpClient
    Private NetStream As NetworkStream
    Public Baglantivar() As Boolean
    Public GonderilecekBytelar() As Byte, AlinanBytelar() As Byte

    Public Sub TcpClientBaglan(ByVal IPAddress As String, ByVal port As String)
        If Form1.BaglantiDurumu = True Then
            Exit Sub
        End If
        Try
            Tcpclient.Connect(IPAddress, Integer.Parse(port))
            Tcpclient.ReceiveTimeout = 5000
            Tcpclient.SendTimeout = 5000
            AlinanBytelar = New Byte(Tcpclient.ReceiveBufferSize) {}
            NetStream = Tcpclient.GetStream()
            Form1.BaglantiDurumu = True
            Form1.Label_BagDurum.ForeColor = Color.Green
            Form1.Label_BagDurum.Text = "Bağlandı"
        Catch ex As System.Exception
            Form1.BaglantiDurumu = False
            Form1.Label_BagDurum.ForeColor = Color.Red
            Form1.Label_BagDurum.Text = "Bağlı Değil"
        End Try
    End Sub
    Public Sub BaglantiKes()
        If Form1.BaglantiDurumu = False Then
            Exit Sub
        End If
        'Bildirim
        NetStream.Close()
        Tcpclient.Close()
        Form1.BaglantiDurumu = False
        Form1.Label_BagDurum.ForeColor = Color.Red
        Form1.Label_BagDurum.Text = "Bağlı Değil"
    End Sub

  Yukarıdaki gibi bir sınıf oluşturmaya çalışıyorum.
-TcpClientBaglan(192.168.1.60,80) Komutu ile bağlanıyor
-BaglantiKes() çalıştıryorum bağlantı kesiliyor.
 
-TcpClientBaglan(192.168.1.60,80) Bağlantı kestikten sonra tekrar bağlan diyorum bağlanmıyor 
   

peko

Kodu aşağıdaki şekilde düzenlersen çözülecektir. (Test etme imkanım olmadı)
Tcpclient As New TcpClient
Tcpclient.Connect(IPAddress, Integer.Parse(port))
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

rree

#2
Public Class GetSocket
    "Private Tcpclient As New TcpClient"   Yerine  "Tcpclient As New TcpClient"  Yazmalıyım

Diğeri Try altında
    Try
            "Tcpclient.Connect(IPAddress, Integer.Parse(port))" Bu zaten aynı 

Ben yanlışmı düşünüyorum. Dört adet prosedür  ile yapmayı düşündüm.
  Birincisi  Tcp client  bağlantı kursun
  İkincisi   Client den datayı  okusun
  Üçüncüsü Client e data göndersin
  Dördüncüsü  Kapatsın

peko

Alıntı YapPublic Class GetSocket
    "Private Tcpclient As New TcpClient"   Yerine  "Tcpclient As New TcpClient"  Yazmalıyım

Hayır, buradaki amaç bağlantı objesini Method'a girdiğinde yeniden oluşturmak ve parametlerini vermek.

Yani kod ;
Public Sub TcpClientBaglan(ByVal IPAddress As String, ByVal port As String)
        If Form1.BaglantiDurumu = True Then
            Exit Sub
        End If
        Try
            Tcpclient As New TcpClient
            Tcpclient.Connect(IPAddress, Integer.Parse(port))
            Tcpclient.ReceiveTimeout = 5000
            Tcpclient.SendTimeout = 5000
            AlinanBytelar = New Byte(Tcpclient.ReceiveBufferSize) {}
            NetStream = Tcpclient.GetStream()


şeklinde olacak. Yukarıda oluşturduğun objeyi iptal et.
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

rree

#4
Sizin dediğiniz gibi oluşturusam bu sefer

Public Sub BaglantiKes()
   Tcpclient.Close() --- Bu sfer Bunu tanımıyor.

End Sub

mesaj birleştirme:: 31 Ocak 2013, 15:17:16

Imports System
Imports System.Text
Imports System.IO
Imports System.Net
Imports System.Net.Sockets
Imports Microsoft.VisualBasic

Public Class GetSocket
    
    
    Public Baglantivar() As Boolean
    Public GonData(8192) As Byte, GelData(8192) As Byte

    Public Sub TcpClientOku(ByVal IPAddress As String, ByVal port As String)
        Dim Tcpclient As New TcpClient
        Dim NetStream As NetworkStream
        Try
            'Dim TcpClient As New Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp)
            Tcpclient.Connect(IPAddress, Integer.Parse(port))
            Tcpclient.ReceiveTimeout = 5000
            Tcpclient.SendTimeout = 5000
            'AlinanBytelar = New Byte(Tcpclient.ReceiveBufferSize) {}
            NetStream = Tcpclient.GetStream()
            Form1.BaglantiDurumu = True
            Form1.Label_BagDurum.ForeColor = Color.Green
            Form1.Label_BagDurum.Text = "Bağlandı"
            Dim TcpStreamWriter As New StreamWriter(NetStream)
            'uzunluk = TcpClient.ReceiveBufferSize
            TcpStreamWriter.AutoFlush = True
            TcpStreamWriter.WriteLine("DataOku")
            NetStream.Read(GelData, 0, CInt(Tcpclient.ReceiveBufferSize))
            NetStream.Close()
            TcpStreamWriter.Close()
            Tcpclient.Close()
        Catch ex As System.Exception
            Form1.BaglantiDurumu = False
            Form1.Label_BagDurum.ForeColor = Color.Red
            Form1.Label_BagDurum.Text = "Bağlı Değil"
            Dim i As Integer
            For i = 0 To 8192
                GelData(i) = 0
            Next
        End Try
    End Sub

End Class

url=http://bit.ly/c25MCx][/url[/img]
Hepsin Aynı prosedür ün için alınca problem yok. Bu durumda ikide bir bağlanma olayaı sonrası zaman kaybını önlemek istemiştim.

peko


Üzgünüm şuan çok zamanım olmadığı için detaylı yazamıyorum.
Örneği incelerseniz sevinirim, olmazsa gece bi ara yazarım.

http://msdn.microsoft.com/tr-tr/library/system.net.sockets.tcpclient.aspx?cs-save-lang=1&cs-lang=vb#code-snippet-2
" Bazıları zeka'sını iş'i zorlaştırmak için, bazıları ise kolaylaştırmak için kullanır.. "

rree

İlgiliniz için teşekürler.Verdiğiniz linki daha önce bakmıştım .Bu nesne olayını ben tam kavrayamadım.