Wrox Programmer Forums
Go Back   Wrox Programmer Forums > .NET > .NET 1.0 and Visual Studio.NET > VS.NET 2002/2003
|
VS.NET 2002/2003 Discussions about the Visual Studio.NET programming environment, the 2002 (1.0) and 2003 (1.1). ** Please don't post code questions here ** For issues specific to a particular language in .NET, please see the other forum categories.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the VS.NET 2002/2003 section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old July 15th, 2003, 01:09 AM
Registered User
 
Join Date: Jun 2003
Posts: 3
Thanks: 0
Thanked 0 Times in 0 Posts
Send a message via Yahoo to rbharatha
Default Socket Programming in Window Service

Hi Folks,

I got program, which I want to run in a windows Service environment and need an Installer inbuilt. I need to implement even Read & Write data from Client to Server in a buffer, which i have to insert into database.

I have a sample program accessing the client Machine from the server.
I 'd appreciate any tips or solution in this regard

thanks in advance

Ramesh

'This is a server program
Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports System.Threading


' State object for reading client data asynchronously
Public Class StateObject
    ' Client socket.
    Public workSocket As Socket = Nothing
    ' Size of receive buffer.
    Public Const BufferSize As Integer = 1024
    ' Receive buffer.
    Public buffer(BufferSize) As Byte
    ' Received data string.
    Public sb As New StringBuilder()
End Class 'StateObject

Public Class AsynchronousSocketListener

    ' Incoming data from the client.
    Public Shared data As String = Nothing

    ' Thread signal.
    Public Shared allDone As New ManualResetEvent(False)


    Public Sub New()
    End Sub 'New


    Public Shared Sub StartListening()
        ' Data buffer for incoming data.
        Dim bytes() As Byte = New [Byte](1024) {}

        ' Establish the local endpoint for the socket.
        ' The DNS name of the computer
        ' running the listener is "host.contoso.com".
        Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
        Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
        Dim localEndPoint As New IPEndPoint(ipAddress, 11000)

        ' Intializes a TCP/IP socket.
        Dim listener As New Socket(AddressFamily.InterNetwork, _
            SocketType.Stream, ProtocolType.Tcp)

        ' Bind the socket to the local endpoint and listen for incoming
        ' connections.
        Try
            listener.Bind(localEndPoint)
            listener.Listen(100)

            While True
                ' Set the event to nonsignaled state.
                allDone.Reset()

                ' Start an asynchronous socket to listen for connections.
                Console.WriteLine("Waiting for a connection...")
                listener.BeginAccept(New AsyncCallback(AddressOf AcceptCallback), _
                listener)

                ' Wait until a connection is made before continuing.
                allDone.WaitOne()
            End While

        Catch e As Exception
            Console.WriteLine(e.ToString())
        End Try

        Console.WriteLine(ControlChars.Cr + "Press ENTER to continue...")
        Console.Read()
    End Sub 'StartListening


    Public Shared Sub AcceptCallback(ar As IAsyncResult)
        ' Signal the main thread to continue.
        allDone.Set()

        ' Get the socket that handles the client request.
        Dim listener As Socket = CType(ar.AsyncState, Socket)
        Dim handler As Socket = listener.EndAccept(ar)

        ' Create the state object.
        Dim state As New StateObject()
        state.workSocket = handler
        handler.BeginReceive(state.buffer, 0, StateObject.BufferSize, 0, _
            New AsyncCallback(AddressOf ReadCallback), state)
    End Sub 'AcceptCallback


    Public Shared Sub ReadCallback(ar As IAsyncResult)
        Dim content As [String] = [String].Empty

        ' Retrieve the state object and the handler socket
        ' from the asynchronous state object.
        Dim state As StateObject = CType(ar.AsyncState, StateObject)
        Dim handler As Socket = state.workSocket

        ' Read data from client socket.
        Dim bytesRead As Integer = handler.EndReceive(ar)

        If bytesRead > 0 Then
            ' There might be more data, so store the data received so far.
            state.sb.Append(Encoding.ASCII.GetString(state.buf fer, 0, _
                bytesRead))

            ' Check for end-of-file tag. If it is not there, read
            ' more data.
            content = state.sb.ToString()
            If content.IndexOf("<EOF>") > - 1 Then
                ' All the data has been read from the
                ' client. Display it on the console.
                Console.WriteLine("Read {0} bytes from socket. " + _
                    ControlChars.Cr + " Data : {1}", content.Length, content)
                ' Echo the data back to the client.
                Send(handler, content)
            Else
                ' Not all data received. Get more.
                handler.BeginReceive(state.buffer, 0,StateObject.BufferSize, _
                    0, New AsyncCallback(AddressOf ReadCallback), state)
            End If
        End If
    End Sub 'ReadCallback


    Private Shared Sub Send(handler As Socket, data As [String])
        ' Convert the string data to byte data using ASCII encoding.
        Dim byteData As Byte() = Encoding.ASCII.GetBytes(data)

        ' Begin sending the data to the remote device.
        handler.BeginSend(byteData, 0, byteData.Length, 0, _
            New AsyncCallback(AddressOf SendCallback), handler)
    End Sub 'Send


    Private Shared Sub SendCallback(ar As IAsyncResult)
        Try
            ' Retrieve the socket from the state object.
            Dim handler As Socket = CType(ar.AsyncState, Socket)

            ' Complete sending the data to the remote device.
            Dim bytesSent As Integer = handler.EndSend(ar)
            Console.WriteLine("Sent {0} bytes to client.", bytesSent)

            handler.Shutdown(SocketShutdown.Both)
            handler.Close()

        Catch e As Exception
            Console.WriteLine(e.ToString())
        End Try
    End Sub 'SendCallback

    'Entry point that delegates to C-style main Private Function.
    Public Overloads Shared Sub Main()
        System.Environment.ExitCode = _
        Main(System.Environment.GetCommandLineArgs())
    End Sub

    Overloads Public Shared Function Main(args() As [String]) As Integer
        StartListening()
        Return 0
    End Function 'Main
End Class 'AsynchronousSocketListener




Ramesh Bharatha





Similar Threads
Thread Thread Starter Forum Replies Last Post
Socket Programming lisamargaret C# 1 December 18th, 2007 10:20 AM
GUI Socket Programming Ewura BOOK: Beginning Java 2 0 November 11th, 2006 12:41 PM
Socket Programming ashu_from_india General .NET 0 June 28th, 2005 12:02 PM
Socket programming vinodkalpaka J2EE 0 June 16th, 2005 02:43 AM
Socket Programming chinni Pro PHP 1 August 18th, 2003 03:59 PM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.