SlideShare une entreprise Scribd logo
1  sur  5
Télécharger pour lire hors ligne
CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET
                  SOCKET PROGRAMMING

                          PROF. GODFREY C. MUGANDA




The goal of this homework is to allow you to extend what we have learned in class
to acquire on your own, skills that are related to skills you already have. You
will figure out, using online resources, how to do socket programming on the .NET
platform using C#. This lab is an outline of how you should go about acquiring
these skills.


                  1. Learn the Visual Studio IDE for C#

Open Visual Studio 2008, then File/New/ Project. You need to select a project
type. First, in the Project Types pane on the left, select Visual C# (You may have
to look under “Other Languages” if the IDE is already set up for Visual C++ or
Visual Basic. Make sure you select a Console Application on the right. At the
botton, specify a name for your application, and make sure you are saving your
project on the local C drive. (Visual Studio hates Network Drives.) Click Ok, fill
in some code to get the following:

using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            System.Console.WriteLine("Muganda for President.");
        }
    }
}

Compile by using Build Solution on the Build menu, and run by using Start WIthout
Debugging on the Debug menu.


                         2. Glance over C# Syntax

C# is so similar to Java it is ridiculous. Glance over the following articles in the
Visual Studio 2008 Documentation, found off the Visual Studio 2008 menu off of
the Windows Start menu. Look under Development Tools and Languages, then
look under Visual Studio, then look under Visual C#.
                                         1
2                           PROF. GODFREY C. MUGANDA


Under Visual C#, look at Getting Started with Visual C#, C# Programming
Guide, Visual C# Guided Tour/C# Language Primer.
You do not need to spend a lot of time on these: you just need to familiarize yourself
with the documentation so you know where to look if you need information.


                             3. Write .NET Server

Look up information on the TcpListener class, which is almost the equivalent of
a Java ServerSocket class. There is also a TcpClient class, which is almost the
counterpart of the Java Socket class. The .NET Documentation has examples
of the use of most of these classes. Here is one, taken from the Visual Studio
documentation.

C# Copy Code
/**
* The following sample is intended to demonstrate how to use a
* TcpListener for synchronous communcation with a TCP client
* It creates a TcpListener that listens on the specified port (13000).
* Any TCP client that wants to use this TcpListener has to explicitly connect
* to an address obtained by the combination of the server
* on which this TcpListener is running and the port 13000.
* This TcpListener simply echoes back the message sent by the client
* after translating it into uppercase.
* Refer to the related client in the TcpClient class.
*/

using   System;
using   System.Text;
using   System.IO;
using   System.Net;
using   System.Net.Sockets;
using   System.Threading;

public class TcpListenerSample
{
    static void Main(string[] args)
    {
        try
        {
            // set the TcpListener on port 13000
            int port = 13000;
            TcpListener server = new TcpListener(IPAddress.Any, port);

               // Start listening for client requests
               server.Start();

               // Buffer for reading data
               byte[] bytes = new byte[1024];
               string data;

               //Enter the listening loop
               while (true)
CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET SOCKET PROGRAMMING             3


              {
                  Console.Write("Waiting for a connection... ");
                  // Perform a blocking call to accept requests.
                  // You could also user server.AcceptSocket() here.
                  TcpClient client = server.AcceptTcpClient();
                  Console.WriteLine("Connected!");
                  // Get a stream object for reading and writing
                  NetworkStream stream = client.GetStream();
                  int i;
                  // Loop to receive all the data sent by the client.
                  i = stream.Read(bytes, 0, bytes.Length);
                  while (i != 0)
                  {
                      // Translate data bytes to a ASCII string.
                      data = System.Text.Encoding.ASCII.GetString(bytes, 0, i);
                      Console.WriteLine(String.Format("Received: {0}", data));
                      // Process the data sent by the client.
                      data = data.ToUpper();
                      byte[] msg = System.Text.Encoding.ASCII.GetBytes(data);
                      // Send back a response.
                      stream.Write(msg, 0, msg.Length);
                      Console.WriteLine(String.Format("Sent: {0}", data));
                      i = stream.Read(bytes, 0, bytes.Length);
                  }
                  // Shutdown and end connection
                  client.Close();
              }
          }
          catch (SocketException e)
          {
              Console.WriteLine("SocketException: {0}", e);
          }
          Console.WriteLine("Hit enter to continue...");
          Console.Read();
    }
}

The idea is that a TcpListener has an AcceptTcpClient or AcceptSocket method
that returns either a Socket or a TcpClient. This Socket or TcpClient will be
connected to a remote Socket or TcpClient. Thus the actual work on the server
end is done by a TcpClient on the server side talking to another TcpClient on the
client side.
This example uses classes we have not discussed. Look them up. For example,
look up the NetworkStream class. This is returned by the getStream() method on
a TcpClient or a Socket. This class is a binary stream that can be both read and
written. The example above treats it as a binary stream by reading and writing
bytes to it.
If you want to use the NetworkStream as a character stream, you can put StreamReader
and StreamWriter on top of the NetworkStream object, as shown here:

        myNetworkStream = New NetworkStream(mySocket)
         reader = New StreamReader(myNetworkStream)
4                          PROF. GODFREY C. MUGANDA


        writer = New StreamWriter(myNetworkStream)
        writer.AutoFlush = True

This is just like good old Java, where we put an InputStreamReader on top of an
byte stream to convert it to a character stream, and where we use a PrintWriter
with the auto flush property on top of a byte output stream. Truly, there is nothing
new under the sun, and you should feel right at home.

                              4. Run your Server

You can run your server from the IDE, or you can run it from the command line.
To run a server from the command line, Start the Visual Studio 2008 command
box from the Visual Studio Tools menu off of the Visual Studion menu. Then use
cd to change directory to the folder that contains your executable and run it from
the commandline.
To test your server, just use good old Telnet or Putty.

                             5. Write your Client

Read the documentation for the TcpClient and Socket classes to figure out how
to write a client, or look for an example in the documentation or online.

                               6. What to submit

Write .NET server and client that does arithmetic. The server is iterative, so it
uses no threads and it handles on client at a time. A client connects and sends
messages that look like this:

add 23 5
mult 4 12
bye

Any number of messages can be sent, but the server closes the connection as soon
as it gets a bye from the client. For all the other messages, the server returns
a number that is either the sum or the product of the two numbers sent in the
message.
The client will be a console application that just reads commands from the user and
sends them over to the server. To help you with the client, Here is a simple program
that illustrates how to read numbers from the console. Actually your program will
read entire strings. The client can just send the entire string to the server without
bothering to parse it. The server will have to parse it to extract the numbers.

using   System;
using   System.Collections.Generic;
using   System.Linq;
using   System.Text;

namespace NetApp
{
    class Program
    {
        static void Main(string[] args)
CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET SOCKET PROGRAMMING       5


        {
             int a, b;
             System.Console.Title = "Muganda’s Console Input Program";
             String input;
             while (true)
             {
                 System.Console.Write("Enter a number: ");
                 input = System.Console.ReadLine();
                 if (input == "bye") break;
                 a = int.Parse(input.Trim());
                 System.Console.Write("Enter another number: ");
                 input = System.Console.ReadLine();
                 b = int.Parse(input.Trim());
                 System.Console.WriteLine("The sum of {0} and {1} is {2}", a, b, a + b);
             }
        }
    }
}

                         7. Miscellaneous Hints

You may find the .NET String.Format class and String.Split class useful.

Contenu connexe

En vedette

Lecture 22
Lecture 22Lecture 22
Lecture 22
3la2
 

En vedette (6)

Webinar, US-Mattress Talks Social Q&A
Webinar, US-Mattress Talks Social Q&AWebinar, US-Mattress Talks Social Q&A
Webinar, US-Mattress Talks Social Q&A
 
Webinar: Beyond Customer Reviews - Meet Social Q&A
Webinar: Beyond Customer Reviews - Meet Social Q&AWebinar: Beyond Customer Reviews - Meet Social Q&A
Webinar: Beyond Customer Reviews - Meet Social Q&A
 
eCommerce Meets Social Networks: Trusted References
eCommerce Meets Social Networks: Trusted ReferenceseCommerce Meets Social Networks: Trusted References
eCommerce Meets Social Networks: Trusted References
 
Free wedding planning
Free wedding planningFree wedding planning
Free wedding planning
 
Lecture 22
Lecture 22Lecture 22
Lecture 22
 
Himadri Updated Resume
Himadri Updated ResumeHimadri Updated Resume
Himadri Updated Resume
 

Dernier

Dernier (20)

Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024Manulife - Insurer Innovation Award 2024
Manulife - Insurer Innovation Award 2024
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 

4 socketprogramming-100606101558-phpapp02

  • 1. CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET SOCKET PROGRAMMING PROF. GODFREY C. MUGANDA The goal of this homework is to allow you to extend what we have learned in class to acquire on your own, skills that are related to skills you already have. You will figure out, using online resources, how to do socket programming on the .NET platform using C#. This lab is an outline of how you should go about acquiring these skills. 1. Learn the Visual Studio IDE for C# Open Visual Studio 2008, then File/New/ Project. You need to select a project type. First, in the Project Types pane on the left, select Visual C# (You may have to look under “Other Languages” if the IDE is already set up for Visual C++ or Visual Basic. Make sure you select a Console Application on the right. At the botton, specify a name for your application, and make sure you are saving your project on the local C drive. (Visual Studio hates Network Drives.) Click Ok, fill in some code to get the following: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { System.Console.WriteLine("Muganda for President."); } } } Compile by using Build Solution on the Build menu, and run by using Start WIthout Debugging on the Debug menu. 2. Glance over C# Syntax C# is so similar to Java it is ridiculous. Glance over the following articles in the Visual Studio 2008 Documentation, found off the Visual Studio 2008 menu off of the Windows Start menu. Look under Development Tools and Languages, then look under Visual Studio, then look under Visual C#. 1
  • 2. 2 PROF. GODFREY C. MUGANDA Under Visual C#, look at Getting Started with Visual C#, C# Programming Guide, Visual C# Guided Tour/C# Language Primer. You do not need to spend a lot of time on these: you just need to familiarize yourself with the documentation so you know where to look if you need information. 3. Write .NET Server Look up information on the TcpListener class, which is almost the equivalent of a Java ServerSocket class. There is also a TcpClient class, which is almost the counterpart of the Java Socket class. The .NET Documentation has examples of the use of most of these classes. Here is one, taken from the Visual Studio documentation. C# Copy Code /** * The following sample is intended to demonstrate how to use a * TcpListener for synchronous communcation with a TCP client * It creates a TcpListener that listens on the specified port (13000). * Any TCP client that wants to use this TcpListener has to explicitly connect * to an address obtained by the combination of the server * on which this TcpListener is running and the port 13000. * This TcpListener simply echoes back the message sent by the client * after translating it into uppercase. * Refer to the related client in the TcpClient class. */ using System; using System.Text; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; public class TcpListenerSample { static void Main(string[] args) { try { // set the TcpListener on port 13000 int port = 13000; TcpListener server = new TcpListener(IPAddress.Any, port); // Start listening for client requests server.Start(); // Buffer for reading data byte[] bytes = new byte[1024]; string data; //Enter the listening loop while (true)
  • 3. CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET SOCKET PROGRAMMING 3 { Console.Write("Waiting for a connection... "); // Perform a blocking call to accept requests. // You could also user server.AcceptSocket() here. TcpClient client = server.AcceptTcpClient(); Console.WriteLine("Connected!"); // Get a stream object for reading and writing NetworkStream stream = client.GetStream(); int i; // Loop to receive all the data sent by the client. i = stream.Read(bytes, 0, bytes.Length); while (i != 0) { // Translate data bytes to a ASCII string. data = System.Text.Encoding.ASCII.GetString(bytes, 0, i); Console.WriteLine(String.Format("Received: {0}", data)); // Process the data sent by the client. data = data.ToUpper(); byte[] msg = System.Text.Encoding.ASCII.GetBytes(data); // Send back a response. stream.Write(msg, 0, msg.Length); Console.WriteLine(String.Format("Sent: {0}", data)); i = stream.Read(bytes, 0, bytes.Length); } // Shutdown and end connection client.Close(); } } catch (SocketException e) { Console.WriteLine("SocketException: {0}", e); } Console.WriteLine("Hit enter to continue..."); Console.Read(); } } The idea is that a TcpListener has an AcceptTcpClient or AcceptSocket method that returns either a Socket or a TcpClient. This Socket or TcpClient will be connected to a remote Socket or TcpClient. Thus the actual work on the server end is done by a TcpClient on the server side talking to another TcpClient on the client side. This example uses classes we have not discussed. Look them up. For example, look up the NetworkStream class. This is returned by the getStream() method on a TcpClient or a Socket. This class is a binary stream that can be both read and written. The example above treats it as a binary stream by reading and writing bytes to it. If you want to use the NetworkStream as a character stream, you can put StreamReader and StreamWriter on top of the NetworkStream object, as shown here: myNetworkStream = New NetworkStream(mySocket) reader = New StreamReader(myNetworkStream)
  • 4. 4 PROF. GODFREY C. MUGANDA writer = New StreamWriter(myNetworkStream) writer.AutoFlush = True This is just like good old Java, where we put an InputStreamReader on top of an byte stream to convert it to a character stream, and where we use a PrintWriter with the auto flush property on top of a byte output stream. Truly, there is nothing new under the sun, and you should feel right at home. 4. Run your Server You can run your server from the IDE, or you can run it from the command line. To run a server from the command line, Start the Visual Studio 2008 command box from the Visual Studio Tools menu off of the Visual Studion menu. Then use cd to change directory to the folder that contains your executable and run it from the commandline. To test your server, just use good old Telnet or Putty. 5. Write your Client Read the documentation for the TcpClient and Socket classes to figure out how to write a client, or look for an example in the documentation or online. 6. What to submit Write .NET server and client that does arithmetic. The server is iterative, so it uses no threads and it handles on client at a time. A client connects and sends messages that look like this: add 23 5 mult 4 12 bye Any number of messages can be sent, but the server closes the connection as soon as it gets a bye from the client. For all the other messages, the server returns a number that is either the sum or the product of the two numbers sent in the message. The client will be a console application that just reads commands from the user and sends them over to the server. To help you with the client, Here is a simple program that illustrates how to read numbers from the console. Actually your program will read entire strings. The client can just send the entire string to the server without bothering to parse it. The server will have to parse it to extract the numbers. using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace NetApp { class Program { static void Main(string[] args)
  • 5. CSC 469/569 LAB / HOMEWORK 4: EXPLORING .NET SOCKET PROGRAMMING 5 { int a, b; System.Console.Title = "Muganda’s Console Input Program"; String input; while (true) { System.Console.Write("Enter a number: "); input = System.Console.ReadLine(); if (input == "bye") break; a = int.Parse(input.Trim()); System.Console.Write("Enter another number: "); input = System.Console.ReadLine(); b = int.Parse(input.Trim()); System.Console.WriteLine("The sum of {0} and {1} is {2}", a, b, a + b); } } } } 7. Miscellaneous Hints You may find the .NET String.Format class and String.Split class useful.