Question
One type of data saved in this file is about students in the XML format, for example, , where U103 represents a student ID and
One type of data saved in this file is about students in the XML format, for example,
Notice that, if you open this XML file with a text editor, you will see these two types of data are mixed in no particular order, which is fine and normal.
In this assignment, you are required to modify the programs of Lab 8, i.e., server_book.cs and client_book.cs, to allow a client to inquiry a student's major and receive average GPA of the major of the student.
(1) Copy the above two programs and re-name them as server_gpa.cs and client_gpa.cs. It's important that the server program name matches the name of the above XML data file.
(2) Modify client_gpa.cs to allow user to enter a student ID like 'U101' and submit it to the server.
(3) Modify server_gpa.cs, so, when it receives a student ID from any client, it looks up the XML file to search and return the student's major like 'PHYSICS'.
(4) Once a client receives the major of the student, and it sends it immediately back to the server with no other input. When the server receives a major and not a student ID, it looks up again the same XML file to find the major's average GPA and return it to the client. Again, there is no calculation needed here because all average GPA are already stored in the data file. The server only needs to search and find one to answer its clients.
(5) The client should display both the returned major of the student and the average GPA of the student's major.
(6) The server accepts one or two clients connection but no more than two at any time.
using System;
using System.Collections.Generic;
using System.Text;
using System.IO;
using System.Net.Sockets;
namespace ClientSocket
{
class Program
{
static void Main(string[] args)
{
TcpClient client = new TcpClient("127.0.0.1", 2055);
try
{
Stream s = client.GetStream();
StreamReader sr = new StreamReader(s);
StreamWriter sw = new StreamWriter(s);
sw.AutoFlush = true;
Console.WriteLine(sr.ReadLine());
while (true)
{
Console.Write("Enter a book title: ");
string title = Console.ReadLine();
sw.WriteLine(title);
if (title == "")
break;
Console.WriteLine(sr.ReadLine());
}
s.Close();
}
finally
{
client.Close();
}
}
}
}
/*
* C# program to accept a book title from clients and sends back
* its price using XML
*/
//SERVER SIDE PROGRAM
using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Configuration;
namespace ServerSocket
{
class Program
{
static TcpListener listener;
const int LIMIT = 10;
public static void Query()
{
while (true)
{
Socket soc = listener.AcceptSocket();
Console.WriteLine("Connected: {0}", soc.RemoteEndPoint);
try
{
Stream s = new
NetworkStream(soc);
StreamReader sr = new StreamReader(s);
StreamWriter sw = new StreamWriter(s);
sw.AutoFlush = true; // enable automatic flushing
sw.WriteLine("{0} books available",
ConfigurationManager.AppSettings.Count);
while (true)
{
string bookTitle = sr.ReadLine();
if (bookTitle == "" || bookTitle == null)
break;
string price =
ConfigurationManager.AppSettings[bookTitle];
if (price == null)
price =
"Sorry, no such book!";
sw.WriteLine(price);
}
s.Close();
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
Console.WriteLine("Disconnected: {0}",
soc.RemoteEndPoint);
soc.Close();
}
}
static void Main(string[] args)
{
IPAddress ipAd =
IPAddress.Parse("127.0.0.1");
listener = new TcpListener(ipAd, 2055);
listener.Start();
Console.WriteLine("Server started, listening to port 2055");
for (int i = 0; i < LIMIT; i++)
{
Thread t = new Thread(new ThreadStart(Query));
t.Start();
//Console.WriteLine("Server thread {0}
started....", ++i);
Console.WriteLine("Server thread {0}
started....", i+1);
}
}
}
}
Step by Step Solution
There are 3 Steps involved in it
Step: 1
Get Instant Access to Expert-Tailored Solutions
See step-by-step solutions with expert insights and AI powered tools for academic success
Step: 2
Step: 3
Ace Your Homework with AI
Get the answers you need in no time with our AI-driven, step-by-step assistance
Get Started