işlemi kapatma

C# (C Sharp) veya Java ile ilgili konuları buraya yazabilirsiniz.
Cevapla
Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 556
Kayıt: 11 Haz 2003 05:49
Konum: Adana
İletişim:

işlemi kapatma

Mesaj gönderen m_ekici » 17 May 2010 01:56

s.a.

internetten socket ile ilgili bir örnek buldum. Mobile terminalden Delphi ye bir mesaj gönderiyor. Terminalde aynı formu 2.defa çalıştırdığımda (formu kapattığım halde) hata alıyorum. Muhtemelen tanım açık kalıyor. aşağıdaki kod ile tanımladığım nesneleri formun çıkışında nasıl kapatırım veya silerim? herkese iyi çalışmalar..

Kod: Tümünü seç

            Sck = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                System.Net.Sockets.SocketType.Stream,
                System.Net.Sockets.ProtocolType.Tcp);
            Sck.Bind(new System.Net.IPEndPoint(System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[0], 54123));            
            MessageDelegate = new AsyncCallback(MessageReceivedCallBack);
            dlg = new DefaultDelegate(AddMessage);

Kullanıcı avatarı
lazio
Moderator
Mesajlar: 1526
Kayıt: 11 Tem 2003 03:55
Konum: İstanbul
İletişim:

Re: işlemi kapatma

Mesaj gönderen lazio » 17 May 2010 04:37

nesne nin dispose() methodu vardır muhtemelen, form çıkışında onu çağırabilirsin. Hatta ardından da GC.SuppressFinalize(nesne); dersen GC hemen devreye girer. Ama en güzeli imkanın varsa using() kullanmak

burda güzelce açıklamış
http://en.csharp-online.net/IDisposable
Resim

..::|YeşilMavi|::..

Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 556
Kayıt: 11 Haz 2003 05:49
Konum: Adana
İletişim:

Re: işlemi kapatma

Mesaj gönderen m_ekici » 18 May 2010 01:18

lazio tşk. ama inan bu c# amma karışık geliyor. Benim bulduğum örnek mi garip anlayamadım. Çıkışta kapat demem yeterli olacak. Socket ile ilgili olan bölümler şunlar;

Kod: Tümünü seç


  #region Objects & Variable
        System.Net.Sockets.Socket Sck;
        byte[] MessageBuffer = new byte[1024];
        AsyncCallback MessageDelegate;
        delegate void DefaultDelegate();
        DefaultDelegate dlg;
        #endregion
        public void ConnectCallBack(IAsyncResult Result)
        {
            if (Result.IsCompleted)
            {
                Sck.EndConnect(Result);
                Sck.BeginReceive(MessageBuffer, 0, MessageBuffer.Length, System.Net.Sockets.SocketFlags.None, MessageDelegate, null);
            }
        }

        public void MessageReceivedCallBack(IAsyncResult Result)
        {
            if (Result.IsCompleted)
            {
                lstMES.Invoke(dlg);
                Array.Clear(MessageBuffer, 0, MessageBuffer.Length);
                Sck.BeginReceive(MessageBuffer, 0, MessageBuffer.Length, System.Net.Sockets.SocketFlags.None, MessageDelegate, null);
            }
        }

        void AddMessage()
        {
            if (System.Text.Encoding.GetEncoding(1254).GetString(MessageBuffer, 0, MessageBuffer.Length)=="infOk") 
            {
             MessageBox.Show("Etiket yazdırıldı..");
            }

        }

 private void Etiket_Load(object sender, EventArgs e)
        {
try
            {
            lstMES.Items.Clear();
            Cursor.Current = Cursors.WaitCursor;
            Sck = new System.Net.Sockets.Socket(System.Net.Sockets.AddressFamily.InterNetwork,
                System.Net.Sockets.SocketType.Stream,
                System.Net.Sockets.ProtocolType.Tcp);
            Sck.Bind(new System.Net.IPEndPoint(System.Net.Dns.GetHostEntry(System.Net.Dns.GetHostName()).AddressList[0], 54123));            
            MessageDelegate = new AsyncCallback(MessageReceivedCallBack);
            dlg = new DefaultDelegate(AddMessage);
            }
            catch
            {
                MessageBox.Show(" Bağlantı oluşturulamadı..");
            }


       try
            {
                IAsyncResult WaitingResult = Sck.BeginConnect(new System.Net.IPEndPoint(
                    System.Net.Dns.GetHostEntry(YAdr.Split(':')[0]).AddressList[0],
                    int.Parse(YAdr.Split(':')[1])), new AsyncCallback(ConnectCallBack), panel3);
                while (WaitingResult.IsCompleted == false)
                {
                    Application.DoEvents();
                }
            }
            catch
            {
                Cursor.Current = Cursors.Default;
                MessageBox.Show(" Etiket yazılacak bilgisayara ulaşılamadı..");
                return;
            }

      private void menuItem1_Click(object sender, EventArgs e)
{
 Sck.Send(System.Text.Encoding.GetEncoding(1254).GetBytes("info : [" + Convert.ToString(SFN)+"]"));
}

Kullanıcı avatarı
m_ekici
Kıdemli Üye
Mesajlar: 556
Kayıt: 11 Haz 2003 05:49
Konum: Adana
İletişim:

Re: işlemi kapatma

Mesaj gönderen m_ekici » 18 May 2010 06:23

farklı bir örnek ile hallettim ama bu defa da takılıyor.

Kod: Tümünü seç

try ABLG := Socket.ReceiveText; except exit; end;
 if Length(ABLG)>8 then
    begin
       try KNO := StrToInt( MidStr(ABLG,A1,A2) );
       KontrolEt(KNO);
       Socket.SendText('Ok');
       Except;
       Socket.SendText('Er1');
       end;
      end
      else Socket.SendText('Er2');
    end;
yukarıda ki kod a bilgi geliyor. El Terminaşi takılıp kalıyor. Sendtext dönmüyor. TSorverSocket i close/open yaptığımda bilgi dönüyor. c# ta xxxx.flush() bunu hallediyor. burada bilgiyi TSorverSocket ı kapatıp açmadan nasıl gönderirim.

Cevapla