Sub RunServer()
'Creates a connection listener for TCP connections
Dim listener As TcpListener
Try
'Begins listening for connections on the specified IP and port
Dim asd As New IPEndPoint(IPAddress.Parse("192.168.1.4"), 50000)
listener = New TcpListener(asd) 'This is working with 127.0.0.1 only now :S
listener.Start()
Console.WriteLine("Listener Started successfully!")
'Loop this forever so we can accept new connections all the time.
While True
Console.WriteLine("Waiting for a client to connect")
'listener.AcceptSocket() Performs a blocking call which means it will stop here until
'a connection is recieved. We then take the socket and put it into our connection variable.
connection = listener.AcceptSocket()
'Get a NetworkStream from our socket.
socketStream = New NetworkStream(connection)
'Initialize our reader to read from the stream
reader = New BinaryReader(socketStream)
Console.ForegroundColor = ConsoleColor.Green
Console.WriteLine("Connection recieved from: " & connection.RemoteEndPoint.ToString())
'A Byte variable to hold a temporary byte before putting it into the fileBytes array
Dim myByte As Byte
Try
'just a variable to dynamically increase the fileBytes array as we get a new byte
Dim i As Integer = 0
'Read a short string from the stream. A short string is a string prefixed with a
'Int16 variable. (a short)
fileName = ReadSString(reader)
fileSize = ReadSString(reader)
Dim fileSizeNum As Integer = Integer.Parse(fileSize)
Console.WriteLine("Beginning to recieve: " & fileName & " size in Bytes: " & fileSizeNum)
'Create and begin writing to our file
writer = New BinaryWriter(File.OpenWrite("F:\htdocs\downloads\" & fileName))
'Loop while the client is connected..
Do
'Only read data if there is some available...
If socketStream.DataAvailable And i <= fileSizeNum Then
'Read a single byte from the stream at a time WHILE we still have data in the stream.
myByte = reader.ReadByte()
'Dynamically resize our fileByte array as we loop but preserving the data thats already in it.
ReDim Preserve fileBytes(i)
'Set the byte...
fileBytes(i) = myByte
'Increase our bytecount for the next iteration.
i += 1
Else
'If theres no more data just forcibly exit the do while loop...
'It seemed to be getting stuck in it somehow...
Exit Do
End If
Loop While i <= fileSizeNum
'Writes the bytes to the file
Console.WriteLine("File Transfer finished...Writing recieved bytes to file.")
writer.Write(fileBytes)
Array.Clear(fileBytes, 0, fileBytes.Length)
ReDim fileBytes(-1)
i = 0
fileName = ""
fileSize = ""
fileSizeNum = 0
'Close the streams
writer.Close()
socketStream.Close()
connection.Close()
Console.WriteLine("Client disconnected")
Console.ForegroundColor = ConsoleColor.Gray
Catch ex As Exception
Console.WriteLine(ex.StackTrace.ToString())
End Try
End While
Catch ex As Exception
Console.WriteLine(ex.ToString())
Console.ReadKey()
End Try
End Sub