0% found this document useful (0 votes)
3 views

Notes

The document contains multiple NS-3 simulation programs demonstrating different network topologies including point-to-point, LAN, star, Wi-Fi, and flow monitoring. Each program sets up nodes, installs applications, configures network parameters, and enables tracing for performance analysis. The simulations utilize various NS-3 modules to create and manage network connections, IP addressing, and mobility models.

Uploaded by

ranabhai4751
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
3 views

Notes

The document contains multiple NS-3 simulation programs demonstrating different network topologies including point-to-point, LAN, star, Wi-Fi, and flow monitoring. Each program sets up nodes, installs applications, configures network parameters, and enables tracing for performance analysis. The simulations utilize various NS-3 modules to create and manage network connections, IP addressing, and mobility models.

Uploaded by

ranabhai4751
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 34

// Exam_point_to_point

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/netanim-module.h"
#include "ns3/mobility-module.h"

using namespace ns3;

int main(){

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

NodeContainer nodeContainer;
nodeContainer.Create(2);

PointToPointHelper pointTopoint;
pointTopoint.SetDeviceAttribute("DataRate", StringValue("50Mbps"));
pointTopoint.SetChannelAttribute("Delay",StringValue("5ms"));

NetDeviceContainer devices;
devices = pointTopoint.Install(nodeContainer);

InternetStackHelper stack;
stack.Install(nodeContainer);

Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer interface;
interface = address.Assign(devices);

ApplicationContainer serverApplications;
ApplicationContainer clientApplications;

//server
UdpEchoServerHelper server(9); //listening on port 9

serverApplications = server.Install(nodeContainer.Get(0)); //server is at Node


0
serverApplications.Start(Seconds(1.0));
serverApplications.Stop(Seconds(10.0));

//client
UdpEchoClientHelper client (interface.GetAddress(0), 9); //serverAddres, port
client.SetAttribute("MaxPackets", StringValue("100"));
client.SetAttribute("Interval", StringValue("1"));
client.SetAttribute("PacketSize", StringValue("1024"));

clientApplications = client.Install(nodeContainer.Get(1)); //client is at Node


1
clientApplications.Start(Seconds(1.0));
clientApplications.Stop(Seconds(10.0));
AsciiTraceHelper ascii;
pointTopoint.EnableAsciiAll(ascii.CreateFileStream("test3.tr"));//ascii
trace .tr

pointTopoint.EnablePcapAll("test3"); //Pcap file for wireshark

MobilityHelper mobility;
mobility.Install(nodeContainer);

AnimationInterface anim("test3.xml"); //netanim file xml


anim.SetConstantPosition(nodeContainer.Get(0), 1.0, 2.0);
anim.SetConstantPosition(nodeContainer.Get(1), 2.0, 3.0);

Simulator::Run();
Simulator::Destroy();

return 0;

//Exam_Lan

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/netanim-module.h"
#include "ns3/mobility-module.h"
#include "ns3/csma-module.h"

using namespace ns3;

int main () {
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

int n1 = 4; // Number of nodes in LAN1


int n2 = 4; // Number of nodes in LAN2

// Create node containers for LANs and routers


NodeContainer lan1Nodes, lan2Nodes, routerNodes;
lan1Nodes.Create(5);
lan2Nodes.Create(n2);
routerNodes.Create(2); // Two routers

// Set up CSMA channels for each LAN


CsmaHelper csma;
csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
csma.SetChannelAttribute("Delay", StringValue("6560ns"));

// Add router nodes to each LAN


lan1Nodes.Add(routerNodes.Get(0));
lan2Nodes.Add(routerNodes.Get(1));

// Install CSMA devices on LANs


NetDeviceContainer lan1Devices = csma.Install(lan1Nodes);
NetDeviceContainer lan2Devices = csma.Install(lan2Nodes);
// Set up a point-to-point link between the two routers
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("10Mbps"));
pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
NetDeviceContainer routerDevices = pointToPoint.Install(routerNodes);

// Install internet stack


InternetStackHelper stack;
stack.Install(lan1Nodes);
stack.Install(lan2Nodes);

// Assign IP addresses
Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer lan1Interfaces = address.Assign(lan1Devices);

address.SetBase("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer lan2Interfaces = address.Assign(lan2Devices);

address.SetBase("10.1.3.0", "255.255.255.0");
Ipv4InterfaceContainer routerInterfaces = address.Assign(routerDevices);

// Populate routing tables


Ipv4GlobalRoutingHelper::PopulateRoutingTables();

// Setup UDP Echo Server on LAN2 node 0


UdpEchoServerHelper echoServer(9);
ApplicationContainer serverApps = echoServer.Install(lan2Nodes.Get(0)); //
Server on LAN2
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));

// Setup UDP Echo Client on LAN1 node 0


UdpEchoClientHelper echoClient(lan2Interfaces.GetAddress(0), 9); // Server
address on LAN2 node 0
echoClient.SetAttribute("MaxPackets", UintegerValue(100));
echoClient.SetAttribute("Interval", TimeValue(Seconds(1)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));

ApplicationContainer clientApps;
clientApps.Add(echoClient.Install(lan1Nodes.Get(0))); // Client on LAN1
clientApps.Start(Seconds(2.0));
clientApps.Stop(Seconds(10.0));

// Enable ASCII and pcap tracing


AsciiTraceHelper ascii;
csma.EnableAsciiAll(ascii.CreateFileStream("lanP.tr"));
pointToPoint.EnablePcapAll("lanP");

// Set up Mobility
MobilityHelper mobility;
mobility.Install(lan1Nodes);
mobility.Install(lan2Nodes);
mobility.Install(routerNodes);

// Set positions for NetAnim


AnimationInterface anim("lanP.xml");
anim.SetConstantPosition(lan1Nodes.Get(0), 10.0, 10.0);
anim.SetConstantPosition(lan1Nodes.Get(1), 10.0, 20.0);
anim.SetConstantPosition(routerNodes.Get(0), 30.0, 15.0);
anim.SetConstantPosition(routerNodes.Get(1), 50.0, 15.0);
anim.SetConstantPosition(lan2Nodes.Get(0), 70.0, 10.0);
anim.SetConstantPosition(lan2Nodes.Get(1), 70.0, 20.0);

Simulator::Run();
Simulator::Destroy();

return 0;
}

exam_star

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/netanim-module.h"
#include "ns3/mobility-module.h"

using namespace ns3;

int main(){

LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);

// Create a central hub node and 4 leaf nodes


NodeContainer nodeContainer;
NodeContainer leafNodes;
NodeContainer hubNode;

hubNode.Create(1); // Create the hub node


leafNodes.Create(4); // Create 4 leaf nodes
nodeContainer.Add(hubNode);
nodeContainer.Add(leafNodes);

// Set up point-to-point connections


PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("50Mbps"));
pointToPoint.SetChannelAttribute("Delay", StringValue("5ms"));

NetDeviceContainer devices;
for (int i = 0; i < 4; i++) {
NetDeviceContainer device = pointToPoint.Install(hubNode.Get(0),
leafNodes.Get(i));
devices.Add(device); // Connect each leaf node to the hub
}

// Install the Internet Stack (IP protocol)


InternetStackHelper stack;
stack.Install(nodeContainer);

Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");

Ipv4InterfaceContainer interface;
interface = address.Assign(devices);
ApplicationContainer serverApplications;
ApplicationContainer clientApplications;

// Server (running on the hub node)


UdpEchoServerHelper server(9); // Listening on port 9
serverApplications = server.Install(hubNode.Get(0)); // Hub node is the server
serverApplications.Start(Seconds(1.0));
serverApplications.Stop(Seconds(10.0));

// Clients (running on the leaf nodes)


for (int i = 0; i < 4; i++) {
UdpEchoClientHelper client(interface.GetAddress(i), 9); // Server address,
port
client.SetAttribute("MaxPackets", StringValue("100"));
client.SetAttribute("Interval", StringValue("1"));
client.SetAttribute("PacketSize", StringValue("1024"));

ApplicationContainer clientApplication= client.Install(leafNodes.Get(i));


clientApplications.Add(clientApplication); // Install on each leaf node
}
clientApplications.Start(Seconds(1.0));
clientApplications.Stop(Seconds(10.0));

// Enable ASCII and pcap traces


AsciiTraceHelper ascii;
pointToPoint.EnableAsciiAll(ascii.CreateFileStream("star_HUB1.tr")); // ASCII
trace .tr file
pointToPoint.EnablePcapAll("star_HUB1"); // Pcap file for Wireshark

// Mobility
MobilityHelper mobility;
mobility.Install(nodeContainer);

AnimationInterface anim("star_HUB1.xml"); // NetAnim file


anim.SetConstantPosition(hubNode.Get(0), 1.0, 2.0);
for (int i = 0; i < 4; i++) {
anim.SetConstantPosition(leafNodes.Get(i), 2.0 + i, 3.0); // Place leaf
nodes at different positions
}

Simulator::Run();
Simulator::Destroy();

return 0;
}

exam_wifi

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/mobility-module.h"
#include "ns3/network-module.h"
#include "ns3/netanim-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/yans-wifi-helper.h"
#include "ns3/ssid.h"
using namespace ns3;

NS_LOG_COMPONENT_DEFINE("SimplifiedExample");

int main(int argc, char* argv[])


{
bool verbose = true;
uint32_t nCsma = 3, nWifi = 3;
bool tracing = false;

CommandLine cmd;
cmd.AddValue("nCsma", "Number of CSMA nodes", nCsma);
cmd.AddValue("nWifi", "Number of wifi STA devices", nWifi);
cmd.AddValue("verbose", "Enable logging", verbose);
cmd.AddValue("tracing", "Enable pcap tracing", tracing);
cmd.Parse(argc, argv);

if (nWifi > 18) {


std::cout << "nWifi should be 18 or less" << std::endl;
return 1;
}

if (verbose) {
LogComponentEnable("UdpEchoClientApplication", LOG_LEVEL_INFO);
LogComponentEnable("UdpEchoServerApplication", LOG_LEVEL_INFO);
}

// Create nodes
NodeContainer p2pNodes;
p2pNodes.Create(2);

NodeContainer csmaNodes;
csmaNodes.Add(p2pNodes.Get(1));
csmaNodes.Create(nCsma);

NodeContainer wifiStaNodes;
wifiStaNodes.Create(nWifi);

// Set up point-to-point link


PointToPointHelper p2p;
p2p.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
p2p.SetChannelAttribute("Delay", StringValue("2ms"));
NetDeviceContainer p2pDevices = p2p.Install(p2pNodes);

// Set up CSMA link


CsmaHelper csma;
csma.SetChannelAttribute("DataRate", StringValue("100Mbps"));
csma.SetChannelAttribute("Delay", TimeValue(NanoSeconds(6560)));
NetDeviceContainer csmaDevices = csma.Install(csmaNodes);

// Set up Wi-Fi
YansWifiChannelHelper channel = YansWifiChannelHelper::Default();
YansWifiPhyHelper phy;
phy.SetChannel(channel.Create());

WifiHelper wifi;
WifiMacHelper mac;
Ssid ssid = Ssid("ns-3-ssid");
NetDeviceContainer staDevices;
mac.SetType("ns3::StaWifiMac", "Ssid", SsidValue(ssid));
staDevices = wifi.Install(phy, mac, wifiStaNodes);

NetDeviceContainer apDevices;
mac.SetType("ns3::ApWifiMac", "Ssid", SsidValue(ssid));
apDevices = wifi.Install(phy, mac, p2pNodes.Get(0));

// Set up mobility
MobilityHelper mobility;
mobility.SetPositionAllocator("ns3::GridPositionAllocator", "MinX",
DoubleValue(0.0), "MinY", DoubleValue(0.0),
"DeltaX", DoubleValue(5.0), "DeltaY",
DoubleValue(10.0), "GridWidth", UintegerValue(3),
"LayoutType", StringValue("RowFirst"));
mobility.SetMobilityModel("ns3::RandomWalk2dMobilityModel", "Bounds",
RectangleValue(Rectangle(-50, 50, -50, 50)));
mobility.Install(wifiStaNodes);
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(p2pNodes.Get(0));

// Install stack and assign IP addresses


InternetStackHelper stack;
stack.Install(csmaNodes);
stack.Install(wifiStaNodes);
stack.Install(p2pNodes.Get(0));

Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer p2pInterfaces = address.Assign(p2pDevices);
address.SetBase("10.1.2.0", "255.255.255.0");
Ipv4InterfaceContainer csmaInterfaces = address.Assign(csmaDevices);
address.SetBase("10.1.3.0", "255.255.255.0");
address.Assign(staDevices);
address.Assign(apDevices);

// Set up UDP echo server and client


UdpEchoServerHelper echoServer(9);
ApplicationContainer serverApps = echoServer.Install(csmaNodes.Get(nCsma));
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(10.0));

UdpEchoClientHelper echoClient(csmaInterfaces.GetAddress(nCsma), 9);


echoClient.SetAttribute("MaxPackets", UintegerValue(1));
echoClient.SetAttribute("Interval", TimeValue(Seconds(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));
ApplicationContainer clientApps = echoClient.Install(wifiStaNodes.Get(nWifi -
1));
clientApps.Start(Seconds(2.0));
clientApps.Stop(Seconds(10.0));

// Routing tables
Ipv4GlobalRoutingHelper::PopulateRoutingTables();

// NetAnim
AnimationInterface anim("wifi.xml");

// Run simulation
Simulator::Stop(Seconds(10.0));
if (tracing) {
phy.SetPcapDataLinkType(WifiPhyHelper::DLT_IEEE802_11_RADIO);
p2p.EnablePcapAll("simplified");
phy.EnablePcap("simplified", apDevices.Get(0));
csma.EnablePcap("simplified", csmaDevices.Get(0), true);
}
Simulator::Run();
Simulator::Destroy();
return 0;
}

exam_flow

#include "ns3/core-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/internet-module.h"
#include "ns3/applications-module.h"
#include "ns3/flow-monitor-module.h"

using namespace ns3;

int main(int argc, char *argv[])


{
uint32_t numClients = 5; // Number of clients in the star topology
std::string dataRate = "5Mbps";
std::string delay = "2ms";
double simulationTime = 10.0; // seconds

CommandLine cmd;
cmd.AddValue("numClients", "Number of client nodes", numClients);
cmd.Parse(argc, argv);

// Create server and client nodes


NodeContainer serverNode;
serverNode.Create(1);

NodeContainer clientNodes;
clientNodes.Create(numClients);

// Install the internet stack on all nodes


InternetStackHelper stack;
stack.Install(serverNode);
stack.Install(clientNodes);

// Create point-to-point connections between the server and each client


PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue(dataRate));
pointToPoint.SetChannelAttribute("Delay", StringValue(delay));

// Containers for network devices and IP interfaces


Ipv4AddressHelper address;
NetDeviceContainer devices;
Ipv4InterfaceContainer interfaces;

for (uint32_t i = 0; i < numClients; ++i)


{
// Connect each client to the server
NetDeviceContainer link = pointToPoint.Install(serverNode.Get(0),
clientNodes.Get(i));
devices.Add(link);

// Assign IP address to each link


std::ostringstream subnet;
subnet << "10.1." << i + 1 << ".0";
address.SetBase(subnet.str().c_str(), "255.255.255.0");
Ipv4InterfaceContainer interface = address.Assign(link);
interfaces.Add(interface);
}

// Set up the UDP echo server on the server node


uint16_t port = 9; // Port number for the echo server
UdpEchoServerHelper echoServer(port);
ApplicationContainer serverApp = echoServer.Install(serverNode.Get(0));
serverApp.Start(Seconds(1.0));
serverApp.Stop(Seconds(simulationTime));

// Set up a UDP echo client on each client node


for (uint32_t i = 0; i < numClients; ++i)
{
UdpEchoClientHelper echoClient(interfaces.GetAddress(i * 2 + 1), port);
echoClient.SetAttribute("MaxPackets", UintegerValue(1));
echoClient.SetAttribute("Interval", TimeValue(Seconds(1.0)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));

ApplicationContainer clientApp = echoClient.Install(clientNodes.Get(i));


clientApp.Start(Seconds(2.0));
clientApp.Stop(Seconds(simulationTime));
}

// Set up FlowMonitor to monitor the network statistics


FlowMonitorHelper flowHelper;
Ptr<FlowMonitor> flowMonitor = flowHelper.InstallAll();

// Run the simulation


Simulator::Stop(Seconds(simulationTime));
Simulator::Run();

// Retrieve and print flow statistics


flowMonitor->CheckForLostPackets();
Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier>(flowHelper.GetClassifier());
std::map<FlowId, FlowMonitor::FlowStats> stats = flowMonitor->GetFlowStats();

for (const auto& flow : stats)


{
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(flow.first);
std::cout << "Flow ID: " << flow.first << " ("
<< t.sourceAddress << " -> " << t.destinationAddress << ")\n";
std::cout << " Transmitted Bytes: " << flow.second.txBytes << "\n";
std::cout << " Received Bytes: " << flow.second.rxBytes << "\n";
std::cout << " Lost Packets: " << flow.second.lostPackets << "\n";
std::cout << " Packets Sent: " << flow.second.txPackets << "\n";
std::cout << " Packets Received: " << flow.second.rxPackets << "\n";
std::cout << " Throughput: "
<< (flow.second.rxBytes * 8.0 / simulationTime / 1024) << " Kbps\
n";
}

Simulator::Destroy();
return 0;
}

//exam_star_gnuPlot

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/csma-module.h"
#include "ns3/flow-monitor-module.h"
#include "ns3/internet-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/netanim-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("StarTopology");

void
PrintStats(Ptr<FlowMonitor> monitor, Ptr<Ipv4FlowClassifier> classifier)
{
FlowMonitor::FlowStatsContainer stats = monitor->GetFlowStats();
double totalThroughput = 0.0;
double totalPacketLoss = 0.0;
uint32_t flowCount = 0;
for (auto i : stats)
{
FlowId flowId = i.first;
FlowMonitor::FlowStats s = i.second;
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(flowId);
std::cout << "Flow from " << t.sourceAddress << " to " <<
t.destinationAddress << std::endl;
std::cout << " Transmitted Bytes: " << s.txBytes << std::endl;
std::cout << " Received Bytes: " << s.rxBytes << std::endl;
std::cout << " Lost Packets: " << s.lostPackets << std::endl;
if (s.rxPackets > 0)
{
double delay = (s.delaySum.GetSeconds() * 1000 / s.rxPackets);
std::cout << " Average Delay (ms): " << delay << std::endl;
double throughput = (s.rxBytes * 8.0 /
s.timeLastRxPacket.GetSeconds() / 1000000.0);
std::cout << " Throughput (Mbps): " << throughput << std::endl;
totalThroughput += throughput;
flowCount++;
}
else
{
std::cout << " No packets received." << std::endl;
}
totalPacketLoss += s.lostPackets;
}
if (flowCount > 0)
{
std::cout << "Average Throughput (Mbps): " << (totalThroughput / flowCount)
<< std::endl;
}
else
{
std::cout << "No flows received any packets." << std::endl;
}
double averagePacketLoss = totalPacketLoss / stats.size();
std::cout << "Average Packet Loss: " << averagePacketLoss << " packets" <<
std::endl;
}

int
main(int argc, char* argv[])
{
uint32_t nNodes = 15;
CommandLine cmd(__FILE__);
cmd.AddValue("nNodes", "Number of peripheral nodes", nNodes);
cmd.Parse(argc, argv);
nNodes = std::max(nNodes, 2u);
NodeContainer centralNode;
centralNode.Create(1);
NodeContainer peripheralNodes;
peripheralNodes.Create(nNodes);
PointToPointHelper p2p;
p2p.SetDeviceAttribute("DataRate", StringValue("5000Mbps"));
p2p.SetChannelAttribute("Delay", TimeValue(MicroSeconds(5)));
NetDeviceContainer centralDevice, peripheralDevices[nNodes];
Ipv4InterfaceContainer peripheralInterfaces[nNodes];
InternetStackHelper stack;
stack.Install(centralNode);
stack.Install(peripheralNodes);
Ipv4AddressHelper address;
for (uint32_t i = 0; i < nNodes; ++i)
{
NodeContainer linkNodes = NodeContainer(centralNode.Get(0),
peripheralNodes.Get(i));
NetDeviceContainer linkDevices = p2p.Install(linkNodes);
std::ostringstream subnet;
subnet << "10.1." << i + 1 << ".0";
address.SetBase(subnet.str().c_str(), "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign(linkDevices);
centralDevice.Add(linkDevices.Get(0));
peripheralDevices[i].Add(linkDevices.Get(1));
peripheralInterfaces[i] = interfaces;
}
for (uint32_t i = 1; i < nNodes; i += 2)
{
UdpEchoServerHelper echoServer(1000 + i);

ApplicationContainer serverApps =
echoServer.Install(peripheralNodes.Get(i));
serverApps.Start(Seconds(1.0));
serverApps.Stop(Seconds(20.0));
}
for (uint32_t i = 0; i < nNodes; i += 2)
{
if (i + 1 < nNodes)
{
UdpEchoClientHelper echoClient(peripheralInterfaces[i +
1].GetAddress(1),
1000 + (i + 1));
echoClient.SetAttribute("MaxPackets", UintegerValue(10));
echoClient.SetAttribute("Interval", TimeValue(Seconds(.01)));
echoClient.SetAttribute("PacketSize", UintegerValue(1024));
ApplicationContainer clientApps =
echoClient.Install(peripheralNodes.Get(i));
clientApps.Start(Seconds(1.0));
clientApps.Stop(Seconds(20.0));
}
}
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
FlowMonitorHelper flowMonitorHelper;
Ptr<FlowMonitor> monitor = flowMonitorHelper.InstallAll();
Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier>(flowMonitorHelper.GetClassifier());
p2p.EnablePcapAll("star_topology_example");
AnimationInterface anim("star_topology_example.xml");
Simulator::Stop(Seconds(20.0));
Simulator::Run();
PrintStats(monitor, classifier);
Simulator::Destroy();
return 0;
}

//Exam_RING_GNU_PLOT

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/mobility-module.h"
#include "ns3/netanim-module.h"
#include <cassert>
#include <fstream>
#include <iostream>
#include <string>
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("RING_TOPOLOGY");
int
main(int argc, char* argv[])
{
Config::SetDefault("ns3::OnOffApplication::PacketSize", UintegerValue(250));
Config::SetDefault("ns3::OnOffApplication::DataRate", StringValue("5kb/s"));
uint32_t N = 9;
CommandLine cmd(__FILE__);
cmd.AddValue("nNodes", "Number of clientNodes to place in the star", N);
cmd.Parse(argc, argv);
NS_LOG_INFO("Create clientNodes.");
NodeContainer serverNode;
NodeContainer clientNodes;
serverNode.Create(1);
clientNodes.Create(N - 1);
NodeContainer allNodes = NodeContainer(serverNode, clientNodes);
InternetStackHelper internet;
internet.Install(allNodes);
std::vector<NodeContainer> nodeAdjacencyList(N - 1);
for (uint32_t i = 0; i < nodeAdjacencyList.size(); ++i)
{
nodeAdjacencyList[i] = NodeContainer(serverNode, clientNodes.Get(i));
}
NS_LOG_INFO("Create channels.");
PointToPointHelper p2p;
p2p.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
p2p.SetChannelAttribute("Delay", StringValue("2ms"));
std::vector<NetDeviceContainer> deviceAdjacencyList(N - 1);
for (uint32_t i = 0; i < deviceAdjacencyList.size(); ++i)
{
deviceAdjacencyList[i] = p2p.Install(nodeAdjacencyList[i]);
}
NS_LOG_INFO("Assign IP Addresses.");

Ipv4AddressHelper ipv4;
std::vector<Ipv4InterfaceContainer> interfaceAdjacencyList(N - 1);
for (uint32_t i = 0; i < interfaceAdjacencyList.size(); ++i)
{
std::ostringstream subnet;
subnet << "10.1." << i + 1 << ".0";
ipv4.SetBase(subnet.str().c_str(), "255.255.255.0");
interfaceAdjacencyList[i] = ipv4.Assign(deviceAdjacencyList[i]);
}
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
uint16_t port = 50000;
Address sinkLocalAddress(InetSocketAddress(Ipv4Address::GetAny(), port));
PacketSinkHelper sinkHelper("ns3::TcpSocketFactory", sinkLocalAddress);
ApplicationContainer sinkApp = sinkHelper.Install(serverNode);
sinkApp.Start(Seconds(1.0));
sinkApp.Stop(Seconds(10.0));
OnOffHelper clientHelper("ns3::TcpSocketFactory", Address());
clientHelper.SetAttribute("OnTime",
StringValue("ns3::ConstantRandomVariable[Constant=1]"));
clientHelper.SetAttribute("OffTime",
StringValue("ns3::ConstantRandomVariable[Constant=0]"));
ApplicationContainer clientApps;
for (uint32_t i = 0; i < clientNodes.GetN(); ++i)
{
AddressValue remoteAddress(
InetSocketAddress(interfaceAdjacencyList[i].GetAddress(0), port));
clientHelper.SetAttribute("Remote", remoteAddress);
clientApps.Add(clientHelper.Install(clientNodes.Get(i)));
}
clientApps.Start(Seconds(1.0));
clientApps.Stop(Seconds(10.0));
// configure tracing
AsciiTraceHelper ascii;
p2p.EnablePcapAll("tcp-star-server");
NS_LOG_INFO("Run Simulation.");
MobilityHelper mobility;
mobility.SetMobilityModel("ns3::ConstantPositionMobilityModel");
mobility.Install(allNodes);
AnimationInterface anim("second_script.xml");
for (uint32_t i = 0; i < clientNodes.GetN(); ++i) {
anim.SetConstantPosition(clientNodes.Get(i), i * 3, 0.0);
}
anim.SetConstantPosition(serverNode.Get(0), 11.0, 22.0);
Simulator::Run();
Simulator::Destroy();
NS_LOG_INFO("Done.");
return 0; }

//Exam_HYBRID_GNU_PLOT

#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/csma-module.h"
#include "ns3/internet-module.h"
#include "ns3/ipv4-global-routing-helper.h"
#include "ns3/network-module.h"
#include "ns3/netanim-module.h"
#include "ns3/flow-monitor-module.h"
#include "ns3/point-to-point-module.h"
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("HybridTopology");
void PrintStats(Ptr<FlowMonitor> monitor, Ptr<Ipv4FlowClassifier>
classifier) {
FlowMonitor::FlowStatsContainer stats = monitor->GetFlowStats();
double totalThroughput = 0.0;
double totalPacketLoss = 0.0;
uint32_t flowCount = 0;
for (auto i : stats) {
FlowId flowId = i.first;
FlowMonitor::FlowStats s = i.second;
Ipv4FlowClassifier::FiveTuple t = classifier->FindFlow(flowId);
std::cout << "Flow from " << t.sourceAddress << " to " <<
t.destinationAddress << std::endl;
std::cout << " Transmitted Bytes: " << s.txBytes << std::endl;
std::cout << " Received Bytes: " << s.rxBytes << std::endl;
std::cout << " Lost Packets: " << s.lostPackets << std::endl;
if (s.rxPackets > 0) {
double delay = (s.delaySum.GetSeconds() * 1000 / s.rxPackets);
std::cout << " Average Delay (ms): " << delay << std::endl;
double throughput = (s.rxBytes * 8.0 / s.timeLastRxPacket.GetSeconds() /
1000000.0);
std::cout << " Throughput (Mbps): " << throughput << std::endl;
totalThroughput += throughput;
flowCount++;
} else {
std::cout << " No packets received." << std::endl;
}
totalPacketLoss += s.lostPackets;
}
if (flowCount > 0) {

std::cout << "Average Throughput (Mbps): " << (totalThroughput / flowCount)


<< std::endl;
} else {
std::cout << "No flows received any packets." << std::endl;
}
double averagePacketLoss = totalPacketLoss / stats.size();
std::cout << "Average Packet Loss: " << averagePacketLoss << " packets" <<
std::endl;
}
int main(int argc, char* argv[]) {
uint32_t nNodes = 15;
CommandLine cmd(__FILE__);
cmd.AddValue("nNodes", "Number of peripheral nodes", nNodes);
cmd.Parse(argc, argv);
nNodes = std::max(nNodes, 3u); // Minimum 3 nodes for ring topology
NodeContainer centralNode;
centralNode.Create(1);
NodeContainer peripheralNodes;
peripheralNodes.Create(nNodes);
PointToPointHelper p2p;
p2p.SetDeviceAttribute("DataRate", StringValue("5000Mbps"));
p2p.SetChannelAttribute("Delay", TimeValue(MicroSeconds(5)));
NetDeviceContainer centralDevice, peripheralDevices[nNodes];
Ipv4InterfaceContainer peripheralInterfaces[nNodes];
InternetStackHelper stack;
stack.Install(centralNode);
stack.Install(peripheralNodes);
Ipv4AddressHelper address;
// Star Topology
for (uint32_t i = 0; i < nNodes; ++i) {
NodeContainer linkNodes = NodeContainer(centralNode.Get(0),
peripheralNodes.Get(i));
NetDeviceContainer linkDevices = p2p.Install(linkNodes);
std::ostringstream subnet;
subnet << "10.1." << i + 1 << ".0";
address.SetBase(subnet.str().c_str(), "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign(linkDevices);
centralDevice.Add(linkDevices.Get(0));
peripheralDevices[i].Add(linkDevices.Get(1));
peripheralInterfaces[i] = interfaces;
}
// Star Topology

for (uint32_t i = 0; i < nNodes; ++i) {


NodeContainer linkNodes = NodeContainer(centralNode.Get(0),
peripheralNodes.Get(i));
NetDeviceContainer linkDevices = p2p.Install(linkNodes);
std::ostringstream subnet;
subnet << "10.1." << i + 1 << ".0";
address.SetBase(subnet.str().c_str(), "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign(linkDevices);
centralDevice.Add(linkDevices.Get(0));
peripheralDevices[i].Add(linkDevices.Get(1));
peripheralInterfaces[i] = interfaces;
}
Ipv4GlobalRoutingHelper::PopulateRoutingTables();
FlowMonitorHelper flowMonitorHelper;
Ptr<FlowMonitor> monitor = flowMonitorHelper.InstallAll();
Ptr<Ipv4FlowClassifier> classifier =
DynamicCast<Ipv4FlowClassifier>(flowMonitorHelper.GetClassifier());
p2p.EnablePcapAll("star_topology_example");
AnimationInterface anim("star_topology_example.xml");
Simulator::Stop(Seconds(20.0));
Simulator::Run();
PrintStats(monitor, classifier);
Simulator::Destroy();
return 0;
}

//Exam_TCP_Tahoe

#include "tutorial-app.h"
#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include <fstream>
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("FifthScriptExample");
//
========================================================================
===
//
// node 0 node 1
// +----------------+ +----------------+
// | ns-3 TCP | | ns-3 TCP |
// +----------------+ +----------------+
// | 10.1.1.1 | | 10.1.1.2 |
// +----------------+ +----------------+
// | point-to-point | | point-to-point |
// +----------------+ +----------------+
// | |
// +---------------------+
// 5 Mbps, 2 ms
//
//
// We want to look at changes in the ns-3 TCP congestion window. We need
// to crank up a flow and hook the CongestionWindow attribute on the socket
// of the sender. Normally one would use an on-off application to generate a
// flow, but this has a couple of problems. First, the socket of the on-off
// application is not created until Application Start time, so we wouldn't be
// able to hook the socket (now) at configuration time. Second, even if we
// could arrange a call after start time, the socket is not public so we
// couldn't get at it.
//
// So, we can cook up a simple version of the on-off application that does what
// we want. On the plus side we don't need all of the complexity of the on-off
// application. On the minus side, we don't have a helper, so we have to get
// a little more involved in the details, but this is trivial.
//

// So first, we create a socket and do the trace connect on it; then we pass
// this socket into the constructor of our simple application which we then
// install in the source node.
//
========================================================================
===
//
/**
* Congestion window change callback
*
* \param oldCwnd Old congestion window.
* \param newCwnd New congestion window.
*/
static void
CwndChange(uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND(Simulator::Now().GetSeconds() << "\t" << newCwnd);
}
/**
* Rx drop callback
*
* \param p The dropped packet.
*/
static void
RxDrop(Ptr<const Packet> p)
{
NS_LOG_UNCOND("RxDrop at " << Simulator::Now().GetSeconds());
}
int
main(int argc, char* argv[])
{
CommandLine cmd(__FILE__);
cmd.Parse(argc, argv);
// In the following three lines, TCP NewReno is used as the congestion
// control algorithm, the initial congestion window of a TCP connection is
// set to 1 packet, and the classic fast recovery algorithm is used. Note
// that this configuration is used only to demonstrate how TCP parameters
// can be configured in ns-3. Otherwise, it is recommended to use the default
// settings of TCP in ns-3.
Config::SetDefault("ns3::TcpL4Protocol::SocketType",
StringValue("ns3::TcpNewReno"));
Config::SetDefault("ns3::TcpSocket::InitialCwnd", UintegerValue(1));
Config::SetDefault("ns3::TcpL4Protocol::RecoveryType",

TypeIdValue(TypeId::LookupByName("ns3::TcpClassicRecovery")));

NodeContainer nodes;
nodes.Create(2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
NetDeviceContainer devices;
devices = pointToPoint.Install(nodes);
Ptr<RateErrorModel> em = CreateObject<RateErrorModel>();
em->SetAttribute("ErrorRate", DoubleValue(0.00001));
devices.Get(1)->SetAttribute("ReceiveErrorModel", PointerValue(em));
InternetStackHelper stack;
stack.Install(nodes);
Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.252");
Ipv4InterfaceContainer interfaces = address.Assign(devices);
uint16_t sinkPort = 8080;
Address sinkAddress(InetSocketAddress(interfaces.GetAddress(1), sinkPort));
PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory",

InetSocketAddress(Ipv4Address::GetAny(), sinkPort));
ApplicationContainer sinkApps = packetSinkHelper.Install(nodes.Get(1));
sinkApps.Start(Seconds(0.));
sinkApps.Stop(Seconds(20.));
Ptr<Socket> ns3TcpSocket = Socket::CreateSocket(nodes.Get(0),
TcpSocketFactory::GetTypeId());
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeCallback(&CwndChange));
Ptr<TutorialApp> app = CreateObject<TutorialApp>();
app->Setup(ns3TcpSocket, sinkAddress, 1040, 1000, DataRate("1Mbps"));
nodes.Get(0)->AddApplication(app);
app->SetStartTime(Seconds(1.));
app->SetStopTime(Seconds(20.));
devices.Get(1)->TraceConnectWithoutContext("PhyRxDrop", MakeCallback(&RxDrop));
Simulator::Stop(Seconds(20));
Simulator::Run();

Simulator::Destroy();
return 0;
}

//Exam_TCP_RENO

#include "tutorial-app.h"
#include "ns3/applications-module.h"
#include "ns3/core-module.h"
#include "ns3/internet-module.h"
#include "ns3/network-module.h"
#include "ns3/point-to-point-module.h"
#include "ns3/stats-module.h"
#include <fstream>
using namespace ns3;
NS_LOG_COMPONENT_DEFINE("SeventhScriptExample");
//
========================================================================
===
//
// node 0 node 1
// +----------------+ +----------------+
// | ns-3 TCP | | ns-3 TCP |
// +----------------+ +----------------+
// | 10.1.1.1 | | 10.1.1.2 |
// +----------------+ +----------------+
// | point-to-point | | point-to-point |
// +----------------+ +----------------+
// | |
// +---------------------+
// 5 Mbps, 2 ms
//
//
// We want to look at changes in the ns-3 TCP congestion window. We need
// to crank up a flow and hook the CongestionWindow attribute on the socket
// of the sender. Normally one would use an on-off application to generate a
// flow, but this has a couple of problems. First, the socket of the on-off
// application is not created until Application Start time, so we wouldn't be
// able to hook the socket (now) at configuration time. Second, even if we
// could arrange a call after start time, the socket is not public so we
// couldn't get at it.
//
// So, we can cook up a simple version of the on-off application that does what

// we want. On the plus side we don't need all of the complexity of the on-off
// application. On the minus side, we don't have a helper, so we have to get
// a little more involved in the details, but this is trivial.
//
// So first, we create a socket and do the trace connect on it; then we pass
// this socket into the constructor of our simple application which we then
// install in the source node.
//
// NOTE: If this example gets modified, do not forget to update the .png figure
// in src/stats/docs/seventh-packet-byte-count.png
//
========================================================================
===
//
/**
* Congestion window change callback
*
* \param stream The output stream file.
* \param oldCwnd Old congestion window.
* \param newCwnd New congestion window.
*/
static void
CwndChange(Ptr<OutputStreamWrapper> stream, uint32_t oldCwnd, uint32_t newCwnd)
{
NS_LOG_UNCOND(Simulator::Now().GetSeconds() << "\t" << newCwnd);
*stream->GetStream() << Simulator::Now().GetSeconds() << "\t" << oldCwnd << "\t" <<
newCwnd

<< std::endl;

}
/**
* Rx drop callback
*
* \param file The output PCAP file.
* \param p The dropped packet.
*/
static void
RxDrop(Ptr<PcapFileWrapper> file, Ptr<const Packet> p)
{
NS_LOG_UNCOND("RxDrop at " << Simulator::Now().GetSeconds());
file->Write(Simulator::Now(), p);
}

int
main(int argc, char* argv[])
{
bool useV6 = false;
CommandLine cmd(__FILE__);
cmd.AddValue("useIpv6", "Use Ipv6", useV6);
cmd.Parse(argc, argv);
NodeContainer nodes;
nodes.Create(2);
PointToPointHelper pointToPoint;
pointToPoint.SetDeviceAttribute("DataRate", StringValue("5Mbps"));
pointToPoint.SetChannelAttribute("Delay", StringValue("2ms"));
NetDeviceContainer devices;
devices = pointToPoint.Install(nodes);
Ptr<RateErrorModel> em = CreateObject<RateErrorModel>();
em->SetAttribute("ErrorRate", DoubleValue(0.00001));
devices.Get(1)->SetAttribute("ReceiveErrorModel", PointerValue(em));
InternetStackHelper stack;
stack.Install(nodes);
uint16_t sinkPort = 8080;
Address sinkAddress;
Address anyAddress;
std::string probeType;
std::string tracePath;
if (!useV6)
{
Ipv4AddressHelper address;
address.SetBase("10.1.1.0", "255.255.255.0");
Ipv4InterfaceContainer interfaces = address.Assign(devices);
sinkAddress = InetSocketAddress(interfaces.GetAddress(1), sinkPort);
anyAddress = InetSocketAddress(Ipv4Address::GetAny(), sinkPort);
probeType = "ns3::Ipv4PacketProbe";
tracePath = "/NodeList/*/$ns3::Ipv4L3Protocol/Tx";
}
else
{
Ipv6AddressHelper address;

address.SetBase("2001:0000:f00d:cafe::", Ipv6Prefix(64));
Ipv6InterfaceContainer interfaces = address.Assign(devices);
sinkAddress = Inet6SocketAddress(interfaces.GetAddress(1, 1), sinkPort);
anyAddress = Inet6SocketAddress(Ipv6Address::GetAny(), sinkPort);
probeType = "ns3::Ipv6PacketProbe";
tracePath = "/NodeList/*/$ns3::Ipv6L3Protocol/Tx";
}
PacketSinkHelper packetSinkHelper("ns3::TcpSocketFactory", anyAddress);
ApplicationContainer sinkApps = packetSinkHelper.Install(nodes.Get(1));
sinkApps.Start(Seconds(0.));
sinkApps.Stop(Seconds(20.));
Ptr<Socket> ns3TcpSocket = Socket::CreateSocket(nodes.Get(0),
TcpSocketFactory::GetTypeId());
Ptr<TutorialApp> app = CreateObject<TutorialApp>();
app->Setup(ns3TcpSocket, sinkAddress, 1040, 1000, DataRate("1Mbps"));
nodes.Get(0)->AddApplication(app);
app->SetStartTime(Seconds(1.));
app->SetStopTime(Seconds(20.));
AsciiTraceHelper asciiTraceHelper;
Ptr<OutputStreamWrapper> stream =
asciiTraceHelper.CreateFileStream("seventh.cwnd");
ns3TcpSocket->TraceConnectWithoutContext("CongestionWindow",
MakeBoundCallback(&CwndChange, stream));

PcapHelper pcapHelper;
Ptr<PcapFileWrapper> file =
pcapHelper.CreateFile("seventh.pcap", std::ios::out, PcapHelper::DLT_PPP);
devices.Get(1)->TraceConnectWithoutContext("PhyRxDrop", MakeBoundCallback(&RxDrop,
file));
// Use GnuplotHelper to plot the packet byte count over time
GnuplotHelper plotHelper;
// Configure the plot. The first argument is the file name prefix
// for the output files generated. The second, third, and fourth
// arguments are, respectively, the plot title, x-axis, and y-axis labels
plotHelper.ConfigurePlot("seventh-packet-byte-count",
"Packet Byte Count vs. Time",
"Time (Seconds)",
"Packet Byte Count");

// Specify the probe type, trace source path (in configuration namespace), and
// probe output trace source ("OutputBytes") to plot. The fourth argument
// specifies the name of the data series label on the plot. The last
// argument formats the plot by specifying where the key should be placed.
plotHelper.PlotProbe(probeType,
tracePath,
"OutputBytes",
"Packet Byte Count",
GnuplotAggregator::KEY_BELOW);

// Use FileHelper to write out the packet byte count over time
FileHelper fileHelper;
// Configure the file to be written, and the formatting of output data.
fileHelper.ConfigureFile("seventh-packet-byte-count", FileAggregator::FORMATTED);
// Set the labels for this formatted output file.
fileHelper.Set2dFormat("Time (Seconds) = %.3e\tPacket Byte Count = %.0f");
// Specify the probe type, trace source path (in configuration namespace), and
// probe output trace source ("OutputBytes") to write.
fileHelper.WriteProbe(probeType, tracePath, "OutputBytes");
Simulator::Stop(Seconds(20));
Simulator::Run();
Simulator::Destroy();
return 0;
}
seventh.plt
set terminal png
set output "seventh-cwnd.png"
set title "Congestion-window vs. Time"
set xlabel "Time (Seconds)"
set ylabel "Congestion-window (Bytes)"
set datafile missing "-nan"
plot "seventh.cwnd" index 0 title "time" with linespoints, "seventh.cwnd" index 1
title "cwnd" with
linespoints

///----------------------------------------------
SOCKET----------------------------------------------///

//TCP_Client

#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>
using namespace std;
#define PORT 8081
#define BUFFER_SIZE 1024
int main() {
int clientFD = 0;
struct sockaddr_in serverAddress;
char buffer[BUFFER_SIZE] = {0};
// Creating socket file descriptor
if ((clientFD = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
cout<<"Socket creation error"<<endl;
return -1;
}
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
// Convert IPv4 and IPv6 addresses from text to binary form
if (inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr) <= 0) {
cout << "Invalid address / Address not supported" << endl;
return -1;
}
// Connect to the server
if (connect(clientFD, (struct sockaddr *)&serverAddress, sizeof(serverAddress)) <
0) {
cout<< "Connection Failed" << endl;
return -1;
}
// Send a message to the server
const char *message = "Hello from client";
send(clientFD, message, strlen(message), 0);
cout << "Message sent to server" << endl;
// Read the acknowledgment message from the server
int valread = read(clientFD, buffer, BUFFER_SIZE);
cout << "Acknowledgment received from server: " << buffer << endl;
// Close the socket
close(clientFD);
return 0;
}

//TCP_SERVER

#include <iostream>
#include <bits/stdc++.h>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
using namespace std;
#define PORT 8081
#define BUFFER_SIZE 1024
int main() {
int serverFD, newSocket;
struct sockaddr_in address;
int opt = 1;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
// Creating socket file descriptor
if ((serverFD = socket(AF_INET, SOCK_STREAM, 0)) < 0) {
cout<<"Socket Failed"<<endl;
exit(1);
}
// Forcefully attaching socket to the port 8081
if (setsockopt(serverFD, SOL_SOCKET, SO_REUSEADDR | SO_REUSEPORT, &opt,
sizeof(opt))) {
cout<<"Couldn't bind socket to port"<<endl;
exit(1);
}
address.sin_family = AF_INET;
address.sin_addr.s_addr = INADDR_ANY;
address.sin_port = htons(PORT); //host to network short
// Binding the socket to the network address and port
if (bind(serverFD, (struct sockaddr *)&address, sizeof(address)) < 0) {
cout<<"Bind Failed"<<endl;
exit(1);
}
// Start listening for incoming connections
if (listen(serverFD, 3) < 0) {
cout<<"Client Connections overloaded"<<endl;
exit(1);
}
cout << "Server is listening on port " << PORT << endl;
// Accept an incoming connection
if ((newSocket = accept(serverFD, (struct sockaddr *)&address,
(socklen_t*)&addrlen)) < 0) {
cout<<"Error in accepting connection"<<endl;
exit(1);
}
// Read the message from the client
int valread = read(newSocket, buffer, BUFFER_SIZE);
cout << "Message received: " << buffer << endl;
// Send an acknowledgment message back to the client
const char *ackMessage = "Message received by server";
send(newSocket, ackMessage, strlen(ackMessage), 0);
cout << "Acknowledgment sent to client" << endl;
// Close the socket
close(newSocket);
close(serverFD);
return 0;
}

//UDP_Client

#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <bits/stdc++.h>
using namespace std;
#define PORT 5566
#define BUFFER_SIZE 1024
int main() {
const char* ip = "127.0.0.1";
int clientFD;
struct sockaddr_in serverAddress;
socklen_t addressSize;
char buffer[BUFFER_SIZE];
// Create UDP socket
clientFD = socket(AF_INET, SOCK_DGRAM, 0);
if (clientFD < 0) {
cout<< "[-]Socket error" << endl;
return 1;
}
cout << "[+]UDP client socket created." << endl;
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
serverAddress.sin_addr.s_addr = inet_addr(ip);
addressSize = sizeof(serverAddress);
// Send message to server
cout << "Enter a message: ";
cin.getline(buffer, BUFFER_SIZE);
sendto(clientFD, buffer, strlen(buffer), 0, (struct sockaddr*)&serverAddress,
addressSize);
cout << "Message sent to server." << endl;
// Receive response from server
memset(buffer, 0, BUFFER_SIZE);
int n = recvfrom(clientFD, buffer, BUFFER_SIZE, 0, (struct
sockaddr*)&serverAddress,
&addressSize);
if (n < 0) {
cout<< "[-]Receive error" << endl;
close(clientFD);
return 1;
}
cout << "Server: " << buffer << endl;
close(clientFD);
return 0;}

//UPD_Server

#include <iostream>
#include <cstring>
#include <unistd.h>
#include <arpa/inet.h>
#include <bits/stdc++.h>
using namespace std;
#define PORT 5566
#define BUFFER_SIZE 1024
int main() {
int serverFD;
struct sockaddr_in serverAddress, clientAddress;
socklen_t addressSize;
char buffer[BUFFER_SIZE];
// Create UDP socket
serverFD = socket(AF_INET, SOCK_DGRAM, 0);
if (serverFD < 0) {
cout<< "[-]Socket error" << endl;
return 1;
}
cout << "[+]UDP server socket created." << endl;
memset(&serverAddress, 0, sizeof(serverAddress));
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(PORT);
serverAddress.sin_addr.s_addr = INADDR_ANY;
// Bind socket to address
if (bind(serverFD, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
cout<< "[-]Bind error" << endl;
close(serverFD);
return 1;
}
cout << "[+]Bind to the port number: " << PORT << endl;
while (true) {
addressSize = sizeof(clientAddress);
memset(buffer, 0, BUFFER_SIZE);
// Receive message from client
int n = recvfrom(serverFD, buffer, BUFFER_SIZE, 0, (struct
sockaddr*)&clientAddress,
&addressSize);
if (n < 0) {
cout << "[-]Receive error" << endl;
continue;
}
cout << "Client: " << buffer << endl;
// Send response to client
strcpy(buffer, "Hi, I am server!");
sendto(serverFD, buffer, strlen(buffer), 0, (struct sockaddr*)&clientAddress,
addressSize);
cout << "Server: " << buffer << endl;
}
close(serverFD);
return 0;}

//TCP_2_server_secondary

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;
int main() {
int serverFD, client1_socket, client2_socket;
struct sockaddr_in serverAddress, client1Address, client2Address;
socklen_t addr_size1, addr_size2;
char buffer[1024];
// Create socket
serverFD = socket(AF_INET, SOCK_STREAM, 0);
if (serverFD < 0) {
cout << "Error creating socket." << endl;
return 1;
}
// Set server address
serverAddress.sin_family = AF_INET;
serverAddress.sin_port = htons(12345);
serverAddress.sin_addr.s_addr = INADDR_ANY;
memset(serverAddress.sin_zero, '\0', sizeof(serverAddress.sin_zero));
// Bind socket
if (bind(serverFD, (struct sockaddr*)&serverAddress, sizeof(serverAddress)) < 0) {
cout<< "Error binding socket." << endl;
return 1;
}
// Listen for connections
if (listen(serverFD, 1) < 0) {
cout << "Error listening on socket." << endl;
return 1;
}
// accept
addr_size1 = sizeof(client1Address);
client1_socket = accept(serverFD, (struct sockaddr*)&client1Address, &addr_size1);
if (client1_socket < 0) {
cout<< "Error accepting connection from Client 1." << endl;
return 1;
}
// Receive character from Client 1
recv(client1_socket, buffer, 1024, 0);
char ch = buffer[0];
char prev = ch - 1;
close(client1_socket);
cout << "Character Received from Client-1 was decremented and sent to Client-2
successfully!" << endl;
addr_size2 = sizeof(client2Address);
client2_socket = accept(serverFD, (struct sockaddr*)&client2Address, &addr_size2);
if (client2_socket < 0) {
cout << "Error accepting connection from Client 2." << endl;
return 1;
}
// Send decremented character to Client 2
send(client2_socket, &prev, 1, 0);
close(client2_socket);
close(serverFD);
return 0;}

//TCP_Client1

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;
int main() {
int client_socket;
struct sockaddr_in server_addr;
char buffer[1024];
// Create socket
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
cout<< "Error creating socket." << endl;
return 1;
}
// Set server address
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345);
server_addr.sin_addr.s_addr = INADDR_ANY;
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero));
// Connect to server
if (connect(client_socket, (struct sockaddr*)&server_addr,
sizeof(server_addr)) < 0) {
cout<< "Error connecting to server." << endl;
return 1;
}
// Send character to server
cout << "Enter a character: ";
cin >> buffer[0];
send(client_socket, buffer, 1, 0);
cout << buffer[0] << " was sent to the server successfully!" << endl;
close(client_socket);
return 0;
}
//TCP_Client2

#include <iostream>
#include <cstring>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <unistd.h>
#include <bits/stdc++.h>
using namespace std;
int main() {
int client_socket;
struct sockaddr_in server_addr;
char buffer[1024];
// Create socket
client_socket = socket(AF_INET, SOCK_STREAM, 0);
if (client_socket < 0) {
cout<< "Error creating socket." << endl;
return 1;
}
// Set server address
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(12345);
server_addr.sin_addr.s_addr = INADDR_ANY;
memset(server_addr.sin_zero, '\0', sizeof(server_addr.sin_zero));
// Connect to server
if (connect(client_socket, (struct sockaddr*)&server_addr,
sizeof(server_addr)) < 0) {
cout<< "Error connecting to server." << endl;
return 1;
}
// Receive character from server
recv(client_socket, buffer, 1024, 0);
cout << "Character received from server: " << buffer[0] << endl;
close(client_socket);
return 0;
}

///MATH_CLIENT_SERVER

Math Client Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4004
#define BUFFER_SIZE 50
int main(){
struct sockaddr_in serverAddress;
char buffer[BUFFER_SIZE] ={0};
char message[BUFFER_SIZE]={0};
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if(clientSocket<0){
cout<<"Socket failed"<<endl;
exit(EXIT_FAILURE);
}
serverAddress.sin_family=AF_INET;
serverAddress.sin_port = htons(PORT);
int convertX = inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr);
if(convertX<0){
cout<<"Conversion of address failed"<<endl;
exit(EXIT_FAILURE);
}
int connectX = connect(clientSocket,(struct sockaddr*)&serverAddress,
sizeof(serverAddress));
if(connectX<0){
cout<<"Connecting clientSocket to server failed"<<endl;
close(clientSocket);
exit(EXIT_FAILURE);
}
string exp;
cout<<"Enter the math expression: ";
cin>>exp;
for(int i=0;i<exp.size();i++) message[i] = exp[i];
send(clientSocket, message, strlen(message),0);
cout<<"Message sent to server!"<<endl;
int valread= read(clientSocket, buffer, BUFFER_SIZE);
cout<<"Server: "<<buffer<<endl;
close(clientSocket);
return 0;
}

Math Server Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4004
#define BUFFER_SIZE 50
int main()
{
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE] = {0};
int serverFD = socket(AF_INET, SOCK_STREAM, 0);
if (serverFD < 0)
{
cout << "Socket Creation failed" << endl;
exit(EXIT_FAILURE);
}
address.sin_family = AF_INET;
address.sin_port = htons(PORT);
address.sin_addr.s_addr = INADDR_ANY;
int bindX = bind(serverFD, (struct sockaddr *)&address, sizeof(address));
if (bindX < 0)
{
cout << "Bind failed" << endl;
exit(EXIT_FAILURE);
}
int listenX = listen(serverFD, 3);
if (listenX < 0)
{
cout << "Listen Failed" << endl;
exit(EXIT_FAILURE);
}
int newSocket = 0;
while (1)
{
newSocket = accept(serverFD, (struct sockaddr *)&address, (socklen_t
*)&addrlen);
if (newSocket < 0)
{
cout << "Accept Failed" << endl;
exit(EXIT_FAILURE);
}

int valread = read(newSocket, buffer, BUFFER_SIZE);


char message[BUFFER_SIZE] = {0};
int j = 0;
int first=-1, second=-1;
char op;
for (char ch : buffer)
{
if (ch >= '0' && ch <= '9' && first==-1)
{
first=ch-'0';
}
else if (ch >='0' && ch <= '9')
{
second=ch-'0';
break;
}
else
{
op=ch;
}
}
int ans = -1;
if(op=='+'){
ans = first+second;
}else if( op=='-'){
ans =first - second;
}else if(op=='*'){
ans=first*second;
}else if(op=='/'){
ans=first/second;
}
string temp =to_string(ans);
for(char ch: temp){
message[j]= ch;
j++;
}
send(newSocket, &message, BUFFER_SIZE, 0);
}
cout << "Evaluated and sent to client" << endl;
close(newSocket);
close(serverFD);
return 0;}

//Postfix Client Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4002
#define BUFFER_SIZE 50
int main(){
struct sockaddr_in serverAddress;
char buffer[BUFFER_SIZE] ={0};
char message[BUFFER_SIZE]={0};
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if(clientSocket<0){
cout<<"Socket failed"<<endl;
exit(EXIT_FAILURE);
}
serverAddress.sin_family=AF_INET;
serverAddress.sin_port = htons(PORT);
int convertX = inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr);
if(convertX<0){
cout<<"Conversion of address failed"<<endl;
exit(EXIT_FAILURE);
}
int connectX = connect(clientSocket,(struct sockaddr*)&serverAddress,
sizeof(serverAddress));
if(connectX<0){
cout<<"Connecting clientSocket to server failed"<<endl;
close(clientSocket);
exit(EXIT_FAILURE);
}
string exp;
cout<<"Enter expression: ";
cin>>exp;
for(int i=0;i<exp.size();i++) message[i] = exp[i];
send(clientSocket, message, strlen(message),0);
cout<<"Message sent to server!"<<endl;
int valread= read(clientSocket, buffer, BUFFER_SIZE);
cout<<"Server: "<<buffer<<endl;
close(clientSocket);
return 0; }

//Postfix Server Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4002
#define BUFFER_SIZE 50
int main(){
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE]={0};
//SOCKET
int serverFD=socket(AF_INET, SOCK_STREAM, 0);
if(serverFD<0){
cout<<"Socket Creation failed"<<endl;
exit(EXIT_FAILURE);
}
address.sin_family=AF_INET;
address.sin_port=htons(PORT);
address.sin_addr.s_addr = INADDR_ANY;
int bindX = bind(serverFD, (struct sockaddr*)&address, sizeof(address));
if(bindX<0){
cout<<"Bind failed"<<endl;
exit(EXIT_FAILURE);
}
int listenX = listen(serverFD, 3);
if(listenX<0){
cout<<"Listen Failed"<<endl;
exit(EXIT_FAILURE);
}
int newSocket = accept(serverFD,(struct sockaddr*)&address,
(socklen_t*)&addrlen);
if(newSocket<0){
cout<<"Accept Failed"<<endl;
exit(EXIT_FAILURE);
}
int valread = read(newSocket, buffer, BUFFER_SIZE);
stack<int> s;
for(char i: buffer)
{

if(i>='0' && i<='9'){


s.push(i-'0');
}else if(i=='+'){
int first= 0, second= 0;
if(!s.empty()) second= s.top(); s.pop();
if(!s.empty()) first= s.top(); s.pop();
s.push(first+ second);
}else if(i=='-'){
int first= 0, second= 0;
if(!s.empty()) second= s.top(); s.pop();
if(!s.empty()) first= s.top(); s.pop();
s.push(first- second);
}else if(i=='*'){
int first= 0, second= 0;
if(!s.empty()) second= s.top(); s.pop();
if(!s.empty()) first= s.top(); s.pop();
s.push(first* second);
}else if(i=='/'){
int first= 0, second= 0;
if(!s.empty()) second= s.top(); s.pop();
if(!s.empty()) first= s.top(); s.pop();
s.push(first/ second);
}
}
int d= s.top();
char message[BUFFER_SIZE]= {0};
int j= log10(d);
while(d){
message[j--]= (d%10)+'0';
d/=10;
}
send(newSocket, &message, BUFFER_SIZE,0);
cout<<"Postfix answer succesfully sent"<<endl;
close(newSocket);
close(serverFD);
return 0;}

//Case Client Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4003
#define BUFFER_SIZE 50
int main(){
struct sockaddr_in serverAddress;
char buffer[BUFFER_SIZE] ={0};
char message[BUFFER_SIZE]={0};
int clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if(clientSocket<0){
cout<<"Socket failed"<<endl;
exit(EXIT_FAILURE);
}
serverAddress.sin_family=AF_INET;
serverAddress.sin_port = htons(PORT);
int convertX = inet_pton(AF_INET, "127.0.0.1", &serverAddress.sin_addr);
if(convertX<0){
cout<<"Conversion of address failed"<<endl;
exit(EXIT_FAILURE);
}
int connectX = connect(clientSocket,(struct sockaddr*)&serverAddress,
sizeof(serverAddress));
if(connectX<0){
cout<<"Connecting clientSocket to server failed"<<endl;
close(clientSocket);
exit(EXIT_FAILURE);
}
string exp;
cout<<"Enter the string: ";
cin>>exp;
for(int i=0;i<exp.size();i++) message[i] = exp[i];
send(clientSocket, message, strlen(message),0);
cout<<"Message sent to server!"<<endl;
int valread= read(clientSocket, buffer, BUFFER_SIZE);
cout<<"Server: "<<buffer<<endl;
close(clientSocket);
return 0;
}
//Case Server Program

#include <bits/stdc++.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
using namespace std;
#define PORT 4003
#define BUFFER_SIZE 50
int main(){
struct sockaddr_in address;
int addrlen = sizeof(address);
char buffer[BUFFER_SIZE]={0};
//SOCKET
int serverFD=socket(AF_INET, SOCK_STREAM, 0);
if(serverFD<0){
cout<<"Socket Creation failed"<<endl;
exit(EXIT_FAILURE);
}
address.sin_family=AF_INET;
address.sin_port=htons(PORT);
address.sin_addr.s_addr = INADDR_ANY;
//BIND
int bindX = bind(serverFD, (struct sockaddr*)&address, sizeof(address));
if(bindX<0){
cout<<"Bind failed"<<endl;
exit(EXIT_FAILURE);
}
//LISTEN
int listenX = listen(serverFD, 3);
if(listenX<0){
cout<<"Listen Failed"<<endl;
exit(EXIT_FAILURE);
}
//ACCEPT
int newSocket = accept(serverFD,(struct sockaddr*)&address,
(socklen_t*)&addrlen);
if(newSocket<0){
cout<<"Accept Failed"<<endl;
exit(EXIT_FAILURE);
}

//READ
int valread = read(newSocket, buffer, BUFFER_SIZE);

//PROCESS
char message[BUFFER_SIZE]={0};
int j =0;
for(char ch : buffer){
if(ch>='a' && ch<='z'){
message[j]=toupper(ch);
j++;
}else if(ch>='A' && ch<='Z'){
message[j]=tolower(ch);
j++;
}else{
message[j]=ch;
j++;
}
}
//END PROCESSING..
//SEND
send(newSocket, &message, BUFFER_SIZE,0);
cout<<"Case Conversion succesfully sent to client"<<endl;
//CLOSE
close(newSocket);
close(serverFD);
return 0;
}

You might also like