mfc Server Problem...



  • hallo,
    ich habe mit VS 2008 ein Programm geschrieben dass auf Port 80 hört und dann einen Text in mein Log Fenster schreibt.Das ganze Projekt ein MFC.

    Tag 18 ist ein Echo Server.
    http://www.aumiller.ch/seiten/buecher/Visual C++ NET in 21 Tagen.pdf

    Ich habe den Echo Server fast Eins zu Eins über nommen, außer dass er etwas zurück sendet.

    Zu meinen Client:

    [VB]
    Imports System.Net.Sockets
    Imports System.IO

    Public Class Form1

    'Variablen:
    Dim stream As NetworkStream
    Dim streamw As StreamWriter
    Dim streamr As StreamReader
    Dim Client As New TcpClient
    Dim IP As String = "192.168.2.99"
    Dim Port As Integer = 80

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

    Client.Connect(IP, Port) 'Client verbindet sich mit IP: 192.168.111.99 und Port 80

    stream = Client.GetStream ' Stream wird auf Client verwiesen
    streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
    streamr = New StreamReader(stream) Stream zum Empfangen wird deklariert

    Dim meintext As String = "hallo Welt"
    streamw.WriteLine(meintext)
    streamw.Flush()
    Client.Close()

    End Sub

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    End Sub
    End Class
    [/VB]

    Wenn ich von meinem Client aus im IE http://192.168.2.99 eintippe.Dann reagiert der Server sofort mit /get lblablab.

    Wenn ich den VB Code in einem Knopf stecke und ausführe. Dann reagiert der Server erst nach 5 Sec.PS.: Wenn jemand Teile von dem C++ Server sehen möchte poste ich sie gerne.



  • ich hab keine ahnung von VB aber vielleicht solltest du mal einen MFC-Clienten schreiben, denn wenn der IE schnell reagiert und dann der MFC-Client auch, dann kanns ja nur an VB liegen das es so lange dauert, wenn das so ist, sollte man vielleicht logischer weise in nen VB-Forum mal fragen.



  • thx,
    über ein VB Forum habe ich auch nur schon Gedanken gemacht 🙂
    Aber es kann auch man c++ Code liegen.Die wo c++ können, können auch meistens vb und nicht umgekehrt. 🙂

    Ich dachte am Anfang VB läuft nur auf Windows Moblie 5.0.Dummerweise habe ich vor kurzen heraus gefunden c++ geht auch. 😞 ,leider dann, als mein Projekt schon fast fertig ist.

    Aus einem anderen Winkel.
    Wenn ich conncet zum Server sende,muss ich dann erst empfangen um wieder zu senden?!



  • ja klar is wie telefonieren, erst musste mal die nummer wählen und dann kannste reden, also erst connecten und dann daten senden, alles andere macht doch wenig sinn, wo soll das hin gehen, bzw. solltest du eigentlich auch nen fehler bekommen das der socket nicht conected ist.



  • nein,nein 🙂

    Mein momentaner Ablauf:
    1.Connect
    2.Send(blablabllb)

    Idee:
    1.Connect
    2.Reviced(allesklar?)
    3.Send

    Das ist mir spontan eingefallen, nach dem ich den Beitrag gesetzt habe.



  • ok ist setze nochmal an:

    Mein Server:

    Mein Knopf "listen":

    // TODO: Add your control notification handler code here
    	UpdateData(TRUE);
    	m_sListener.Create(m_port); 
    	if(m_sListener.Listen()==FALSE)
    	{
    
    		m_sListener.Close(); 
    		return;			
    	}
    	CString a,b,c;
    	a = m_log;
    
    	b =  "Listening For Connections!!!";
    	c = "\r\n";
    	m_log= a +b+c;
    	UpdateData(FALSE);
    	m_listenbutton.EnableWindow(FALSE);
    	m_stopbutton.EnableWindow(TRUE);
    

    Hier wird Acceptiert:

    void CServerDlg::OnAccept()
    {
    CString strIP;
    UINT port;
    m_log += "Fehlera";
    UpdateData(FALSE);
    
    if(m_sListener.Accept(m_sConnected))
    	{
    	//m_sConnected.GetSockName(strIP,port);
    
    	CString a,b,c;
    b = "Client Connected,IP :";
    c = "\r\n";
    a = m_log;
    m_log = a +b +c;
    /// hier
    
    	//m_sConnected.Send("Connected To Server",strlen("Connected To Server")); 
    	UpdateData(FALSE);
    	}
    else
    {
    	m_log += "Fehler";
    UpdateData(FALSE);
    }
    }
    

    Mein Client:

    VB
    Imports System
    Imports System.Text
    Imports System.IO
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Runtime.InteropServices
    
    Public Class Form1
        'Variablen:
        Dim stream As NetworkStream
        Dim streamw As StreamWriter
        Dim streamr As StreamReader
        Dim Client As New TcpClient
    
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            log.Text = log.Text + "log gehts"
            Client.Connect("192.168.2.111", 80)  'Client verbindet sich 
            log.Text = log.Text + "connnet ist fertig"
    
            stream = Client.GetStream ' Stream wird auf Client verwiesen
            streamw = New StreamWriter(stream) ' Stream zum Senden wird deklariert
            streamr = New StreamReader(stream)
    
            streamw.WriteLine("14#2#1!0!0!#2!3!0")
            log.Text = log.Text + "gesendet"
    
            streamw.Flush()
            log.Text = log.Text + "Flush ausgeführt"
    
            Client.Close()
    
        End Sub
    End Class
    

    Bei meinem Server(Laptop) drücke ich auf den Knopf "listen".
    Bei meiner Client(PocketPC) drücke ich auf "connect"

    Dann hängt er bei ...

    Client.Connect("192.168.2.111", 80)  'Client verbindet sich
    

    und stürtzt ab nach ca. 5 sec ab.

    Wenn ich den VB kram bei meinem Desctop PC nutze, dann gehts ?!
    PocketPC, Laptop und Desktop PC sind alles per Wlan verbunden.

    Wenn ich mit dem IE vom PcoketPC auf den Server zugreife, dann reagiert er sofort.

    Ich weis nicht wo ich anfangen soll den Fehler zusuchen,bzw wie soll ich ihn einkesseln?


Anmelden zum Antworten