㈠ 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 看一下吧