2008年6月27日 星期五

我的C++程式

#include
using std::cout;
using std::endl;

#include

int main()
double Simulation_Status;
{
if (Simulation_Status == 0) // load parameters
{
double PacketArrivalTime = 0.0;
double MeanPacketLength = 0.0;
int BufferSize = 0;
double LineSpeed = 0.0;
double SimulationTime = 0.0;
double TimeStamp = 0.0;
PoissonArrival TrafficModel;
int channel_state = 0;

long total_data_packets = 0;
long total_departed_pakcets = 0;
double total_packet_system_time = 0.0;
double total_packet_queueing_time = 0.0;
long number_of_packet_queued = 0;
long number_of_blocked_data = 0;

double channel_time = 0.0;

Q.Scheduled_Time = TrafficModel.next_arrival(PacketArrivalTime);
Q.Create_Time = Q.Scheduled_Time;
Q.length = TrafficModel.frame_length(MeanPacketLength);
Q.event = new_packet_arrival; Q.data_type = DATA;
Q.seq_no = Schedular.seq_no++;
Schedular.join_from_head(Q);

button1->Text = "Running...";
Simulation_Status = 1;
button1->Enabled = false;

textBox5->AcceptsReturn = true;
textBox5->AppendText("Simulation starts at " + DateTime::Now.ToLongTimeString() + "\n");

while (TimeStamp<1000)
{
Schedular.get_event(Q);
if (Schedular.seq_no > 200000000)
Schedular.seq_no = 0;

switch(Q.event)
{
case new_packet_arrival:
if (TimeStamp > Q.Scheduled_Time)
textBox5->AppendText("error410\n");
else
{
TimeStamp = Q.Scheduled_Time;
if (channel_state == 0)
{
Q.event = departure;
Q.Scheduled_Time = ((floor(Q.length) * 8) / LineSpeed) + TimeStamp; ++channel_state;
Schedular.join_from_end(Q);

textBox5->AppendText(Q.seq_no + " enters server \n");
}
else if (DataBuffer.count < BufferSize)
{
Q.event = queued;
DataBuffer.join_from_end(Q);
textBox5->AppendText(Q.seq_no + " enters queue \n");
}
else
{
textBox5->AppendText(Q.seq_no + " blocked! \n");
}
Q.data_type = DATA;
Q.event = new_packet_arrival;
Q.Scheduled_Time = TrafficModel.next_arrival(PacketArrivalTime) + TimeStamp; Q.Create_Time = Q.Scheduled_Time;
Q.length = TrafficModel.frame_length(MeanPacketLength);
Q.seq_no = Schedular.seq_no++;
Schedular.join_from_end(Q);
}
break;
case departure:
if (TimeStamp > Q.Scheduled_Time)
textBox5->AppendText("error447\n");
else
{
TimeStamp = Q.Scheduled_Time;
--channel_state;
if (Q.data_type == DATA)
{
}
if (DataBuffer.count != 0)
{
DataBuffer.get_event(Q);
Q.event = departure;
Q.Scheduled_Time = ((floor(Q.length) * 8) / LineSpeed) + TimeStamp; ++channel_state;
Schedular.join_from_end(Q);
total_packet_queueing_time += (TimeStamp - Q.Create_Time);
}
}
break;
}
}
textBox5->AppendText("Simulation ends at " + DateTime::Now.ToLongTimeString() + "\n");
button1->Text = "Finished"; Simulation_Status = 0;

double packet_loss_rate = double(number_of_blocked_data) / double(total_data_packets);

double average_delay = total_packet_system_time / double(total_departed_pakcets);

double average_queueing_delay = total_packet_queueing_time / double(total_departed_pakcets);

double average_queueing_delay2 = total_packet_queueing_time / double(number_of_packet_queued);
textBox5->AppendText("封包遺失率 = " + Convert::ToString(packet_loss_rate) + "\n"); textBox5->AppendText("平均延遲時間 = " + Convert::ToString(average_delay) + " sec.\n");
textBox5->AppendText("平均排程時間 = " + Convert::ToString(average_queueing_delay) + " sec.\n");
textBox5->AppendText("平均排程時間 if queued = " + Convert::ToString(average_queueing_delay2) + " sec.\n");
}
}
{
Simulation_Status = 0;
}

9428132 葉育辰 期末程式

老實說我沒有寫過C++的經驗


我只是依循以前寫C的經驗去改這個程式


一開始進行編譯的時候他總是會跳出某些主要的錯誤 :


expected unqualified-id before XXXXX




#include的部分我有上網查了一下功能加了進去


#include的部分不知道要定義甚麼所以就沒加進去了


總之這個程式還是跑不出來結果

http://impulse502.blogspot.com/2008/06/c.html

這個程式只有開頭不一樣後面的我幾乎沒有改

2008年6月26日 星期四

NS2技能的自我檢視

Q1 : nsBench的應用



  • 雖然nsBench主要是用來產生有線網路的模擬TCL碼 , 但它並不支援無線網路 ,
    所以我想問別的軟體可以模擬兩者的TCL碼 .



Q2 : 模擬網路狀況的環境



  • 為什麼我們不選擇用Linux系統的環境去模擬網路傳輸狀況呢 ? 它的指令跟cygmin
    差不多 , 可是論未來發展的話Linux系統是不可或缺的 , 為什麼不用它來做練習並增
    加熟練度呢 ? 而且可以取代NSG2的有NUTUns , 所以我一直有疑問就是為何要在
    windows系統使用NS2模擬 , 而不是直接用Linux系統做模擬 ? 還是說NS2有特別好用
    的東西嗎 ?



Q3 : TCL碼的疑問



  • 第四章的 wired-measure.tcl 裡有一行寫到 set null [new Agent/mUdpSink]
    附註是說新增的接收Agent , 可以把接收封包資訊紀錄到檔案中
    那意思是我可以設2個以上的Agent進而分別觀察封包資訊紀錄並互做比較嗎
    還是說在這個程式裡只能用一個 ? 是因為沒寫入路由表規則的原因嗎?




Q4 : 影像傳輸問題



  • 第六章實驗主要目的是模擬出一個有畫面遺失的影像檔 , 我的問題是我們一定要
    YUV(原始) --> m4v --> mp4 --> 經由etmp4產生有畫面遺失的影像檔 -->YUV(遺失畫面)
    一定要經過這麼複雜的程序才能模擬出我們想要的YUV檔嗎?



Q5 : sd 檔 與 rd 檔

  • 為什麼每模擬一次 tcl 檔它都只會產生sd 和 rd , 不會產生sd1 和 rd1 .......
    例如:第一次模擬tcl 檔產生sd 和 rd
    第二次模擬tcl 檔產生sd1 和 rd1 (不會覆蓋之前的sd 和 rd )