tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
7
ZUGRIFFE
1577
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Vlami Vlami ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Ich habe mit den Forum einträgen die man hier über TCP Listener/Client findet angesehen und daraufhin einen TCP Listener und einen TCP Client gebaut und ich will nur einen Befehl übersenden das geht auch aber leider nur Lokal also mit der IP:127.0.0.1 aber so bald ich das im netzt versuche dann bleibt der Server Host = Listener.AcceptTcpClient() Hängen auch wenn der Client einen String schickt könnte das an meinem Ruter liegen oder an sonstige netzt Einstellungen oder einfach nur an der Programmierung?

    Ich bitte um Hilfe
     

  2. #2
    jgraber jgraber ist offline Mitglied
    Registriert seit
    Apr 2007
    Beiträge
    13
    Hallo Vlami,

    Hast du den entsprechenden Port auf dem Rechner freigegeben, auf dem der Server-Teil läuft?

    Es kann natürlich auch an deinem Programm liegen. Poste doch bitte einmal die Teile für den Server und den Client.
     

  3. #3
    Erik Erik ist offline Mitglied Gold
    Registriert seit
    Jul 2008
    Beiträge
    171
    Hi,

    Du musst am Router deinen Port an den entsprechenden PC weiterleiten. Einfach mal die Konfigurationen durchforsten. Bei mir musste ich auch noch den Port bei der Firewall freigeben.

    Denn die IP die du nach außen siehst (wieistmeineip.de) ist die deines Routers. Der Router weiß aber nichtan wen er Anfragen die an ihn geschickt werden weiterleiten soll
    Gruß
    Erik
    Geändert von Erik (02.01.10 um 10:33 Uhr) Grund: mit meinem Deutsch gehts den Bach runter
     

  4. #4
    Vlami Vlami ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Hier ist mein Code zum Server und Client und ich denke jetzt stark das dann am Code liegt weil ich mit einem anderen Code denn ich aus dem 101Beispielen von Microsoft habe das geschafft habe einen String zu übergeben. Es ist nur einwenig zu Kompliziert das in mein Prog einzugeben weil ich auch gestehen muss dass ich neu in diesem Thema bin

    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    
    Imports System
    Imports System.IO
    Imports System.Net
    Imports System.Net.Sockets
    Imports System.Text
    Imports Microsoft.VisualBasic
    Namespace Multitasking_Privat_Verbindung_lan
     
        Public Class ClasLan_Server
            Public ip As String = "127.0.0.1"
            Public port As Integer
            Private AddrIP As IPAddress = IPAddress.Parse(ip)
            Private Listener As New TcpListener(AddrIP, port)
            Private Host As New TcpClient()
            Private Networkstream1 As NetworkStream
     
            Public Function Time_stream() As Boolean
                If Listener.Pending = True And Host.Connected = False Then
                    Host = Listener.AcceptTcpClient()
                    Networkstream1 = Host.GetStream
                    Time_stream = True
                Else
                    Time_stream = False
                End If
            End Function
     
            Public Function Empfang() As String
                Dim wert As String
                Dim ruck As String
                wert = ""
     
                If Host.Client.Available > 0 Then
                    Dim Buffer(Host.Client.Available) As Byte
                    Networkstream1.Read(Buffer, 0, Host.Client.Available)
     
                    For Each item As Byte In Buffer
                        wert &= Microsoft.VisualBasic.Chr(item)
                    Next
                End If
     
                Send("Der befehl wird versucht bearbeitet zu werden!")
                ruck = Net_Server_Privat_Befehle(wert)
                Empfang = ruck
                'Call close()
                'Call server_start()
            End Function
     
            Public Sub Send(ByVal massage As String)
                Dim msg As Byte() = System.Text.Encoding.ASCII.GetBytes(massage)
                Networkstream1.Write(msg, 0, msg.Length)
     
                Call close()
                Call server_start()
            End Sub
     
            Public Sub server_start()
                'Dim Listener As New TcpListener(Addr, 13000)
                Listener.Start()
                ForAuswahl.Time_Lan.Enabled = True
            End Sub
     
            Public Sub close()
                Networkstream1.Close()
                ForAuswahl.Time_Lan.Enabled = False
            End Sub
            Public Sub server_stop()
                Dim argunull As Object
                Dim aus_gabe As String
                Try
                    Networkstream1.Close()
                    Listener.Stop()
                    ForAuswahl.Time_Lan.Enabled = False
                Catch e As NullReferenceException
                    argunull = e
                    Listener.Stop()
                    ForAuswahl.Time_Lan.Enabled = False
                Catch e As ArgumentNullException
                    argunull = e
                    aus_gabe = "ArgumentNullException;"
                Catch e As SocketException
                    argunull = e
                    aus_gabe = "SocketException;"
                End Try
            End Sub
        End Class
     
        Public Class ClasLan_Client
     
            Public Function NetClient(ByVal server As [String], ByVal PORT As Int32, ByVal message As [String]) As String
                Dim gesentete_nachricht As String
                Dim argunull As Object
     
                ' Create a TcpClient.
                ' Note, for this client to work you need to have a TcpServer 
                ' connected to the same address as specified by the server, port
                ' combination.
                Try
                    Dim client As New TcpClient(server, PORT)
                    Try
                        ' Translate the passed message into ASCII and store it as a Byte array.
                        'Transformiert V: massage in ascii um unt schreibt es in ein beyt rein muss sein!
                        Dim data As [Byte]() = System.Text.Encoding.ASCII.GetBytes(message)
     
                        ' Get a client stream for reading and writing.
                        '  Stream stream = client.GetStream();
                        'Nimmt einen server und spricht den so an das er schreiben und lesen kann
                        Dim stream As NetworkStream = client.GetStream()
     
                        ' Send the message to the connected TcpServer. 
                        'Sendet eine byte V über das netz
                        stream.Write(data, 0, data.Length)
     
                        'Gesendete Nachricht in V schreiben
                        gesentete_nachricht = "Sent: " & message
     
                        ' Receive the TcpServer.response.
                        ' Buffer to store the response bytes.
                        data = New [Byte](256) {}
     
                        ' String to store the response ASCII representation.
                        Dim responseData As [String] = [String].Empty
     
                        ' Read the first batch of the TcpServer response bytes.
     
                        Dim bytes As Int32 = stream.Read(data, 0, data.Length)
                        responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes)
     
                        NetClient = "Antwort: " & responseData
     
                        ' Close everything.
                        stream.Close()
                        client.Close()
                    Catch e As NullReferenceException
                        client.Close()
                        argunull = e
                        NetClient = "NullReferenceException;"
                    Catch e As ArgumentNullException
                        argunull = e
                        NetClient = "ArgumentNullException;"
                    Catch e As SocketException
                        argunull = e
                        NetClient = "SocketException;"
                    End Try
                Catch e As SocketException
                    argunull = e
                    NetClient = "SocketException;"
                End Try
            End Function
     
        End Class
    End Namespace

    Ich starte den Server und frage ihn dann mit einem Timer ab Geht nicht also habe ich auch schon mit einem Code Probiert der die form einfrieren läst geht aber auch nicht bei beiden hat der das prob das die hier stehen bleiben (Host = Listener.AcceptTcpClient()) trotz das sich ein Client einwählt und auch ein String schickt
     

  5. #5
    Erik Erik ist offline Mitglied Gold
    Registriert seit
    Jul 2008
    Beiträge
    171
    Hi,

    Zitat Zitat von Vlami
    trotz das sich ein Client einwählt und auch ein String schickt
    kann dein Client denn eine Verbindung zum Server aufbauen?

    Gruß
    Erik
     

  6. #6
    Vlami Vlami ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Ja und Nein

    wenn ich mich mit dem Client einlogge dann schickt der einen String (Kommt nichts an) danach wartet der auf Rückgabe und wenn ich dann den Server ausmache dann kommt ein SocketException Fehler also nach dem moto die Verbindung wurde vorzeitig beendet. Der Server bleibt beim debug bei Host = Listener.AcceptTcpClient() stehen ka ob das dir was sagt
     

  7. #7
    Vlami Vlami ist offline Grünschnabel
    Registriert seit
    Jan 2010
    Beiträge
    4
    Hi ich bin es noch mal ich habe das Problem jetzt über die Nettzwerg beisiele von Microsoft gelöst
    ich habe dann den Code in mein prog übernommen und zwar in ein Modul anstatt in die form Funktioniert auch ganz gut
    habe jetzt nur das Problem das der mir nichts ausgibt aber auf allen anderen Clients schon

    könnte mir da bitte einer helfen
     

  8. #8
    Avatar von VScan
    VScan VScan ist offline Mitglied Gold
    Registriert seit
    Dec 2008
    Ort
    Munich
    Beiträge
    131
    Hey,

    also "er" bleibt deswegen bei
    Code :
    1
    
    Socket.Accept();
    "hängen", weil das eine blockierende Methode ist, diese lagert man i.d.R. aus, z.B. in einen anderen Thread.

    Dein Problem mit dem Datenempfang wird eventuell daran liegen, dass das Serverprogramm auf Deinem PC läuft und die Ports, die der Server benutzt auch Deine sind, aber das ist nur eine Vermutung, weil das aus dem Codeschnipsel leider nicht hervorgeht.


    MfG VScan
     
    „Jeder Fehler erscheint unglaublich dumm, wenn Andere ihn begehen.“
    Georg Christoph Lichtenberg

    Netiquette (vA §15)
    Codetags/Codeboxen
    Sehr gut gelöste Beiträge bitte mit einem "Danke" abschließen, danke :D

Ähnliche Themen

  1. RMI über Netzwerk (nicht lokal !)
    Von zerrome im Forum Java
    Antworten: 18
    Letzter Beitrag: 15.01.08, 11:59
  2. AJAX geht lokal aber nicht im www
    Von Eiszwerg im Forum Javascript & Ajax
    Antworten: 15
    Letzter Beitrag: 30.08.07, 22:16
  3. Script lokal ausführen - geht nicht.
    Von HeinerK im Forum PHP
    Antworten: 13
    Letzter Beitrag: 24.11.06, 14:30
  4. Antworten: 10
    Letzter Beitrag: 23.08.05, 12:56
  5. Antworten: 8
    Letzter Beitrag: 16.08.04, 23:26