dcsimg
Results 1 to 4 of 4

Thread: Problem with tcp server/client - Unable to write data

  1. #1

    Thread Starter
    New Member
    Join Date
    May 2018
    Posts
    9

    Unhappy Problem with tcp server/client - Unable to write data

    Hello guys, i've downloaded a tcp server with correspondent client and made some tests: On LAN and offline network works 100%, but when i use WAN, the server only receive 5~15 messages and crashes with the error "unable to write data to the transport connection an existing connection was forcibly closed". On cliente side the message isn't delivered to other users.

    Server code:
    Code:
    Imports System.Net.Sockets
    Imports System.Text
    Module Module1
        Dim clientsList As New Hashtable
        Sub Main()
            Dim serverSocket As New TcpListener(8888)
            Dim clientSocket As TcpClient
            Dim infiniteCounter As Integer
            Dim counter As Integer
    
            serverSocket.Start()
            msg("Chat Server Started ....")
            counter = 0
            infiniteCounter = 0
            For infiniteCounter = 1 To 2
                infiniteCounter = 1
                counter += 1
                clientSocket = serverSocket.AcceptTcpClient()
    
                Dim bytesFrom(1024) As Byte
                Dim dataFromClient As String
    
                Dim networkStream As NetworkStream = _
    
                clientSocket.GetStream()
                networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
                dataFromClient = _
                dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
    
                clientsList(dataFromClient) = clientSocket
    
                broadcast(dataFromClient + " Joined ", dataFromClient, False)
    
                msg(dataFromClient + " Joined chat room ")
                Dim client As New handleClinet
                client.startClient(clientSocket, dataFromClient, clientsList)
            Next
    
            clientSocket.Close()
            serverSocket.Stop()
            msg("exit")
            Console.ReadLine()
        End Sub
    
        Sub msg(ByVal mesg As String)
            mesg.Trim()
            Console.WriteLine(" >> " + mesg)
        End Sub
        Private Sub broadcast(ByVal msg As String, _
        ByVal uName As String, ByVal flag As Boolean)
            Dim Item As DictionaryEntry
            For Each Item In clientsList
                Dim broadcastSocket As TcpClient
                broadcastSocket = CType(Item.Value, TcpClient)
                Dim broadcastStream As NetworkStream = _
                        broadcastSocket.GetStream()
                Dim broadcastBytes As [Byte]()
    
                If flag = True Then
                    broadcastBytes = Encoding.ASCII.GetBytes(uName + " says : " + msg)
                Else
                    broadcastBytes = Encoding.ASCII.GetBytes(msg)
                End If
    
                broadcastStream.Write(broadcastBytes, 0, broadcastBytes.Length)
                broadcastStream.Flush()
            Next
        End Sub
    
        Public Class handleClinet
            Dim clientSocket As TcpClient
            Dim clNo As String
            Dim clientsList As Hashtable
    
            Public Sub startClient(ByVal inClientSocket As TcpClient, _
            ByVal clineNo As String, ByVal cList As Hashtable)
                Me.clientSocket = inClientSocket
                Me.clNo = clineNo
                Me.clientsList = cList
                Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf doChat)
                ctThread.Start()
            End Sub
    
            Private Sub doChat()
                Dim infiniteCounter As Integer
                Dim requestCount As Integer
                Dim bytesFrom(10024) As Byte
                Dim dataFromClient As String
                Dim sendBytes As [Byte]()
                Dim serverResponse As String
                Dim rCount As String
                requestCount = 0
                For infiniteCounter = 1 To 2
                    infiniteCounter = 1
                    Try
                        requestCount = requestCount + 1
                        Dim networkStream As NetworkStream = _
                                clientSocket.GetStream()
                        networkStream.Read(bytesFrom, 0, CInt(clientSocket.ReceiveBufferSize))
                        dataFromClient = System.Text.Encoding.ASCII.GetString(bytesFrom)
                        dataFromClient = _
                            dataFromClient.Substring(0, dataFromClient.IndexOf("$"))
                        msg("From client - " + clNo + " : " + dataFromClient)
                        rCount = Convert.ToString(requestCount)
    
                        broadcast(dataFromClient, clNo, True)
                    Catch ex As Exception
                        MsgBox(ex.ToString)
                    End Try
                Next
            End Sub
    
        End Class
    End Module

    Client code:

    Code:
    Imports System.Net.Sockets
    Imports System.Text
    Public Class Form1
        Dim clientSocket As New System.Net.Sockets.TcpClient()
        Dim serverStream As NetworkStream
        Dim readData As String
        Dim infiniteCounter As Integer
    
        Private Sub Button1_Click(ByVal sender As System.Object, _
            ByVal e As System.EventArgs) Handles Button1.Click
            Dim outStream As Byte() = _
            System.Text.Encoding.ASCII.GetBytes(TextBox2.Text + "$")
            serverStream.Write(outStream, 0, outStream.Length)
            serverStream.Flush()
        End Sub
    
        Private Sub msg()
            If Me.InvokeRequired Then
                Me.Invoke(New MethodInvoker(AddressOf msg))
            Else
                TextBox1.Text = TextBox1.Text + Environment.NewLine + " >> " + readData
            End If
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, _
        ByVal e As System.EventArgs) Handles Button2.Click
            readData = "Conected to Chat Server ..."
            msg()
            clientSocket.Connect("ip", 8888)
            'Label1.Text = "Client Socket Program - Server Connected ..."
            serverStream = clientSocket.GetStream()
    
            Dim outStream As Byte() = _
            System.Text.Encoding.ASCII.GetBytes(TextBox3.Text + "$")
            serverStream.Write(outStream, 0, outStream.Length)
            serverStream.Flush()
    
            Dim ctThread As Threading.Thread = New Threading.Thread(AddressOf getMessage)
            ctThread.Start()
        End Sub
    
        Private Sub getMessage()
            For infiniteCounter = 1 To 2
                infiniteCounter = 1
                serverStream = clientSocket.GetStream()
                Dim buffSize As Integer
                Dim inStream(10024) As Byte
                buffSize = clientSocket.ReceiveBufferSize
                serverStream.Read(inStream, 0, buffSize)
                Dim returndata As String = _
                System.Text.Encoding.ASCII.GetString(inStream)
                readData = "" + returndata
                msg()
            Next
        End Sub
    End Class
    What i need to do to fix this?

    Ty all

  2. #2
    .NUT jmcilhinney's Avatar
    Join Date
    May 2005
    Location
    Sydney, Australia
    Posts
    102,575

    Re: Problem with tcp server/client - Unable to write data

    There's quite a bit of code there and you've given no indication that you've done any real investigation yourself, i.e. debugging to narrow down exactly where the error occurs and what data is in use at the time. You should be able to provide a specific set of steps that we can perform to reproduce the issue and an explanation of exactly what we should expect. As it is, I'm not inclined to make the effort required to narrow down the issue first and then try to fix it and I suspect that many others won't either. You should do everything you can to help us help you or you're less likely to get help at all.

  3. #3

    Thread Starter
    New Member
    Join Date
    May 2018
    Posts
    9

    Re: Problem with tcp server/client - Unable to write data

    Quote Originally Posted by jmcilhinney View Post
    There's quite a bit of code there and you've given no indication that you've done any real investigation yourself, i.e. debugging to narrow down exactly where the error occurs and what data is in use at the time. You should be able to provide a specific set of steps that we can perform to reproduce the issue and an explanation of exactly what we should expect. As it is, I'm not inclined to make the effort required to narrow down the issue first and then try to fix it and I suspect that many others won't either. You should do everything you can to help us help you or you're less likely to get help at all.
    I tried 3 different methods, debugged and the problem persist... On google this problem was ony solved to asp.net
    How to reproduce the issue: Just start the server and use the client to connect using external ip. Afeter 5~15 messages, the server closes and appear the error message (unable to write/read data to the transport connection an existing connection was forcibly closed by the server).
    I need to know how the server can keep the connections :/

  4. #4

    Thread Starter
    New Member
    Join Date
    May 2018
    Posts
    9

    Re: Problem with tcp server/client - Unable to write data

    I forgot the screenshots:
    What happened: i started the server, and connected with client, after 15 seconds, returned the error
    Attached Images Attached Images     

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  



Featured


Click Here to Expand Forum to Full Width