㈠ VC如何實現pkt傳輸
這也就是將非同步的乙太網數據按照帶寬需求放置到同步的SDH網路中進行傳輸的問題,乙太網封幀後採用虛級聯技術,將需要傳輸的數據封裝到不同的SDH虛容器VC中。通過將多個VC12或VC4捆綁在一起作為一個VCG ( Virtual Concatenation Group)虛級聯組形成邏輯鏈路。為了標識同一個虛級聯組中的不同成員,VC虛級聯技術在SDH幀的通道開銷中定義了復幀指示器(MFI)和序列指示器(SQ)。有了這些標識,虛級聯組中的各個成員就可以通過不同的路徑到達接收端。接收端通過這兩個指示器將經過不同路徑,有著不同時延的成員正確地組合在一起。這樣就完成了乙太網在SDH上的傳輸。綁定48個VC12就相當於100M。
對於動態調整機制現在一般使用LCAS技術,它的基本思想是在虛級聯的源端和目的端適配功能之間建立一種控制機理,允許無損傷地增加和減少傳送網中虛級聯信號的鏈路容量,同時提供臨時刪除失效鏈路的能力,而不至於中斷現有業務或預留帶寬資源。也就是說當虛級聯組中部分成員失效時能夠臨時去除這些失效成員,系統自動減少容量,正常成員仍能正常傳輸,當失效成員修復時,系統能自動恢復虛級聯組的帶寬。
㈡ 利用vc如何將文本文件中的內容實時通過串口進行傳輸呢
//不懂的話再問我吧.
//我給你一個我自己以前寫的串口操作的函數,包括兩部份,一部分主CPP文件,一部分為(頭)H文件.
//以下的代碼在VC++6.0下測試通過.
//將下面的兩部分代碼分別保存在serialport.cpp文件和serialport.h文件中.
//最後面是一個簡單的使用舉例.
//===========================SerialPort.cpp的開始=========================
#include "SerialPort.h"
HANDLE OpenSerialPort(string & strPort,ULONG ulBaudrate)
{
HANDLE hSerial;
hSerial = CreateFile((strPort.c_str()),
GENERIC_READ|GENERIC_WRITE,
NULL,
NULL,
OPEN_EXISTING,
NULL,
NULL);
if(hSerial == INVALID_HANDLE_VALUE)//Open serial port failed.
{
return hSerial;
}
//Config serial port
DCB PortDCB;
PortDCB.DCBlength = sizeof(DCB);
// Get the default serial parameter.
GetCommState(hSerial, &PortDCB);
PortDCB.BaudRate = ulBaudrate; // baudrate
PortDCB.ByteSize = 8; // Number of bits/byte, 4-8
PortDCB.Parity = NOPARITY;
PortDCB.StopBits = ONESTOPBIT;
if (!SetCommState(hSerial, &PortDCB))
{
//config the serial port failed.
CloseHandle(hSerial);
return (INVALID_HANDLE_VALUE);
}
//Config the serial port timeout property.
COMMTIMEOUTS CommTimeouts;
GetCommTimeouts(hSerial, &CommTimeouts);//Get the serial port default timeout.
CommTimeouts.ReadIntervalTimeout = MAXDWORD;
CommTimeouts.ReadTotalTimeoutMultiplier = 10;
CommTimeouts.ReadTotalTimeoutConstant = 10;
CommTimeouts.WriteTotalTimeoutMultiplier = 50;
CommTimeouts.WriteTotalTimeoutConstant = 100;
if (!SetCommTimeouts(hSerial, &CommTimeouts))
{
//config the serial port timeout failed;
CloseHandle(hSerial);
return (INVALID_HANDLE_VALUE);
}
return (hSerial);
};
void CloseSerialPort(HANDLE hSerial)
{
CloseHandle(hSerial);
};
bool WriteSerial(BYTE *btData,ULONG ulSize,HANDLE hSerial)
{
DWORD dwNumBytes,dwRet;
dwRet=WriteFile (hSerial, //Handle
btData, //Data buffer
ulSize, //Buffer size
&dwNumBytes, //written bytes
NULL); //don't support
return (dwRet!=0);
};
bool ReadSerial(BYTE *btData,ULONG *ulSize,HANDLE hSerial)
{
//SetCommMask (hSerial, EV_RXCHAR);
ULONG ulRdSize=0;
BYTE Byte;
DWORD dwBytes;
bool blRd=false;
DWORD dwMask=EV_RXCHAR;
//WaitCommEvent(hSerial,&dwMask,NULL);
SetCommMask (hSerial, EV_RXCHAR);
while (ReadFile(hSerial, &Byte, 1, &dwBytes, 0)!=0){
if (dwBytes>0){
btData[ulRdSize++]=Byte;
if (ulRdSize==*ulSize){
blRd=true;
break;
}
}else{
blRd=true;
break;
}
}
*ulSize=ulRdSize;
return (blRd);
};
//===========================SerialPort.cpp的結束=========================
//===========================SerialPort.H的開始=========================
#include <windows.h>
#include <string>
using namespace std;
HANDLE OpenSerialPort(string & strPort,ULONG ulBaudrate);
void CloseSerialPort(HANDLE hSerial);
bool WriteSerial(BYTE *btData,ULONG ulSize,HANDLE hSerial);
bool ReadSerial(BYTE *btData,ULONG *ulSize,HANDLE hSerial);
//===========================SerialPort.H的結束=========================
//使用代碼示例:
HANDLE hSerialPort;
hSerialPort = OpenSerialPort("COM1:",115200);//Open serial port com1
if (hSerialPort != INVALID_HANDLE_VALUE)
{
if (!WriteSerial("HELLO!",7,hSerialPort))//Send data hello to com1
MessageBox(0,"ERROR","ERROR",MB_ICONWARNING);//show error message
CloseSerialPort(hSerialPort);
}
㈢ VC如何實現多線程文件傳輸
發送端,將文件分成N份(如5),FILE1(0-a位元組),FILE2(a-b位元組),FILE3(b-c位元組),FILE4(c-d位元組),FILE5(d-文件長度)。 發送可以使用M個線程(如5),THREAD1負責發送FILE1,依次類推,發送的每個數據包包括如下內容:文件內容的長度,文件內容,文件內容起始點相對於整個文件的位置,文件內容相對於整個文件的位置。例如:文件A的總長度為100000位元組,則可以先發送一個數據包給接收端,讓其准備接收,接著發送 4000(長度),....(內容的二進制流),0(起始),4000(結束)。 接收端根據接收的包寫文件即可。 http://www.vckbase.com/document/viewdoc/?id=448 看一下吧