Esempio di socket server sincrono

Mediante il seguente programma di esempio viene creato un server per la ricezione delle richieste di connessione dai client. Poiché il server viene generato con un socket sincrono, l'esecuzione dell'applicazione server viene sospesa in attesa della connessione di un client. Viene ricevuta una stringa dal client, la stringa viene visualizzata nella console, quindi restituita nuovamente al client. La stringa proveniente dal client deve contenere la stringa "<EOF>" che segnala la fine del messaggio.

Imports System
Imports System.Net
Imports System.Net.Sockets
Imports System.Text
Imports Microsoft.VisualBasic

Public Class SynchronousSocketListener
    
    ' Incoming data from the client.
    Public Shared data As String = Nothing
    
    
    Public Shared Sub StartListening()
        ' Data buffer for incoming data.
        Dim bytes() As Byte = New [Byte](1024) {}
        
        ' Establish the local endpoint for the socket.
        ' Dns.GetHostName returns the name of the 
        ' host running the application.
        Dim ipHostInfo As IPHostEntry = Dns.Resolve(Dns.GetHostName())
        Dim ipAddress As IPAddress = ipHostInfo.AddressList(0)
        Dim localEndPoint As New IPEndPoint(ipAddress, 11000)
        
        ' Create 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(10)
            
            ' Start listening for connections.
            While True
                Console.WriteLine("Waiting for a connection...")
                ' Program is suspended while waiting for an incoming connection.
                Dim handler As Socket = listener.Accept()
                data = Nothing
                
                ' An incoming connection needs to be processed.
                While True
                    bytes = New Byte(1024) {}
                    Dim bytesRec As Integer = handler.Receive(bytes)
                    data += Encoding.ASCII.GetString(bytes, 0, bytesRec)
                    If data.IndexOf("<EOF>") > - 1 Then
                        Exit While
                    End If
                End While
                
                ' Show the data on the console.
                Console.WriteLine("Text received : {0}", data)
                
                ' Echo the data back to the client.
                Dim msg As Byte() = Encoding.ASCII.GetBytes(data)
                
                handler.Send(msg)
                handler.Shutdown(SocketShutdown.Both)
                handler.Close()
            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
    
    ' 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 'SynchronousSocketListener

[C#]
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

public class SynchronousSocketListener {
    
    // Incoming data from the client.
    public static string data = null;

    public static void StartListening() {
        // Data buffer for incoming data.
        byte[] bytes = new Byte[1024];

        // Establish the local endpoint for the socket.
        // Dns.GetHostName returns the name of the 
        // host running the application.
        IPHostEntry ipHostInfo = Dns.Resolve(Dns.GetHostName());
        IPAddress ipAddress = ipHostInfo.AddressList[0];
        IPEndPoint localEndPoint = new IPEndPoint(ipAddress, 11000);

        // Create a TCP/IP socket.
        Socket listener = 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(10);

            // Start listening for connections.
            while (true) {
                Console.WriteLine("Waiting for a connection...");
                // Program is suspended while waiting for an incoming connection.
                Socket handler = listener.Accept();
                data = null;

                // An incoming connection needs to be processed.
                while (true) {
                    bytes = new byte[1024];
                    int bytesRec = handler.Receive(bytes);
                    data += Encoding.ASCII.GetString(bytes,0,bytesRec);
                    if (data.IndexOf("<EOF>") > -1) {
                        break;
                    }
                }

                // Show the data on the console.
                Console.WriteLine( "Text received : {0}", data);

                // Echo the data back to the client.
                byte[] msg = Encoding.ASCII.GetBytes(data);

                handler.Send(msg);
                handler.Shutdown(SocketShutdown.Both);
                handler.Close();
            }
            
        } catch (Exception e) {
            Console.WriteLine(e.ToString());
        }

        Console.WriteLine("\nPress ENTER to continue...");
        Console.Read();
        
    }

    public static int Main(String[] args) {
        StartListening();
        return 0;
    }
}

Vedere anche

Esempio di socket client sincrono | Utilizzo di un socket server sincrono | Esempi di codice di socket