DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • Idempotency Under Concurrency: Why Your Application Check Isn't the Last Line of Defense
  • Running a Self-Hosted WAF in Production: Practical Lessons From SafeLine
  • Your Application Has an Unindexed Attack Surface. Do You Know What’s in It?
  • Retrieval Augmented Generation With Spring AI 2.0, Claude, and PGvector

Trending

  • Part 4: Multi-Agent Orchestration — Pairing Goose With Quarkus Flow State Machines
  • MQTT, Kafka, NATS, or Zenoh? Choosing Edge-to-Cloud Messaging by Traffic Pattern
  • Architecture Review Boards for Generative AI: A Framework for Governance, Risk Management, and Responsible Adoption
  • New York City Taxi Trips: Putting Neo4j and DuckDB to Work

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

Synchronous Client Server Application in C#

By 
Pavithra Gunasekara
·
Aug. 05, 12 · Interview
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
23.8K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in
TCP Based Server

  • Establish the local end point for the socket
  • Open a socket using Socket()
  • Name the socket using Bind()
  • Listen for incoming connections using Listen(), parameter inside the method specifies the maximu number of pending connections
  • Accept client connections using Accept(), a new socket is created here but the original socket keeps listen
  • Send, Receive data using Send() and Receive()
  • Close Socket using Close()

Server.cs
   using System; 
   using System.Net.Sockets; 
   using System.Net; 
   using System.Text; 

   public class SocketServer 
   { 
      public static void Main(string [] args) 
      { 

         // establish the local end point for the socket 
         IPHostEntry ipHost = Dns.Resolve("localhost"); 
         IPAddress ipAddr = ipHost.AddressList[0]; 
         IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); 

         // create a Tcp/Ip Socket 
         Socket sListener = new Socket(AddressFamily.InterNetwork, 
                                       SocketType.Stream, ProtocolType.Tcp); 

         // bind the socket to the local endpoint and 
         // listen to the incoming sockets 

         try 
         { 
            sListener.Bind(ipEndPoint); 
            sListener.Listen(10); 

            // Start listening for connections 

            while (true) 
            { 
               Console.WriteLine("Waiting for a connection on port {0}",ipEndPoint); 

               // program is suspended while waiting for an incoming connection 
               Socket handler = sListener.Accept(); 

               string data = null; 

               // we got the client attempting to connect 
               while(true) 
               { 
                  byte[] bytes = new byte[1024]; 

                  int bytesRec = handler.Receive(bytes); 

                  data += Encoding.ASCII.GetString(bytes, 0, bytesRec); 

                  if (data.IndexOf("<theend>") > -1) 
                  { 
                     break; 
                  } 
               } 

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

               string theReply = "Thank you for those " + data.Length.ToString() 
                               + " characters..."; 
               byte[] msg = Encoding.ASCII.GetBytes(theReply); 

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

      } // end of Main 
   } 


TCP Based Client

  • Establish a remote endpoint
  • Open a socket using Socket()
  • Connect to the remote host using Connect
  • Send, receive data using Send() and Receive()
  • Close Socket using Close()

Client.cs
using System; 
using Systern.Net.Sockets; 
using Systern.Net; 
using Systern.Text; 

public class SocketClient 
{ 
   public static void Main(string [] args) 
   {

    // data buffer for incoming data 
    byte[] bytes = new byte[1024]; 

    // connect to a Remote device 
    try 
    { 
       // Establish the remote end point for the socket 
       IPHostEntry ipHost = Dns.Resolve("127.0.0.1"); 
       IPAddress ipAddr = ipHost.AddressList[0]; 
       IPEndPoint ipEndPoint = new IPEndPoint(ipAddr, 11000); 

       Socket sender = new Socket(AddressFamily.Internetwork, 
                                  SocketType.Stream, ProtocolType.Tcp); 

       // Connect the socket to the remote endpoint 

          sender.Connect(ipEndPoint); 

          Console.WriteLine("Socket connected to {0}", 
          sender.RemoteEndPoint.ToString()); 

          string theMessage = "This is a test"; 

          byte[] msg = Encoding.ASCII.GetBytes(theMessage+"<theend>"); 

          // Send the data through the socket 
          int bytesSent = sender.Send(msg); 

          // Receive the response from the remote device 
          int bytesRec = sender.Receive(bytes); 

          Console.WriteLine("The Server says : {0}", 
                            Encoding.ASCII.GetString(bytes,0, bytesRec)); 

          // Release the socket 
          sender.Shutdown(SocketShutdown.Both); 
          sender.Close(); 

    } 
    catch(Exception e) 
    { 
       Console.WriteLine("Exception: {0}", e.ToString()); 
    } 
  } 
} 


Fllowing image shows how client and server send and receive data


application

Published at DZone with permission of Pavithra Gunasekara. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • Idempotency Under Concurrency: Why Your Application Check Isn't the Last Line of Defense
  • Running a Self-Hosted WAF in Production: Practical Lessons From SafeLine
  • Your Application Has an Unindexed Attack Surface. Do You Know What’s in It?
  • Retrieval Augmented Generation With Spring AI 2.0, Claude, and PGvector

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook