【網路編程/C++】字串的連結

來源:互聯網
上載者:User

經過一段日子的學習,PXE模擬器的console版本已經完成,於是正在著手用MFC來進行介面美化。

為了類比多台機器同時向一個TFTP伺服器請求資料,並下載檔案。為了保持各個程式間的相對獨立,就用多進程代替多線程來予以實現。

在這個過程中就牽扯到了字串的連結,同時在資料包構建的過程中,這個知識點也一直出現:

下面將通過兩個執行個體來說明字串連結的一種常用的方法:

 

//構造形如:“command param1”的dos命令</p><p>//例:c:>TFTPmanagement.exe 5</p><p> TCHAR command[MAXPROCESS];<br /> char cnumber[MAXPROCESS];</p><p> TCHAR *ptr=command;<br /> int number=5;</p><p> memcpy(ptr,"c://TFTPmanagement.exe",sizeof("c://TFTPmanagement.exe")-1);<br /> ptr+=sizeof("c://TFTPmanagement.exe")-1;<br /> memcpy(ptr," ",sizeof(TCHAR));<br /> ptr++;</p><p> memset(cnumber,'/0',sizeof(cnumber));<br /> itoa((i+1),cnumber,10); //int型轉為整型<br /> memcpy(ptr,cnumber,strlen(cnumber));</p><p>//得到的command就是所求字串

 

 

 

同理,可以用這個方法來構造網路資料包,這裡以TFTP包的請求包為例:

 

 

/*<br /> Figure 1: RRQ/WRQ</p><p> 2 bytes string 1 string 1 string 1 string 1<br /> +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+--><br /> | opc |filename| 0 | mode | 0 | opt1 | 0 | value1 | 0 | <<br /> +-------+---~~---+---+---~~---+---+---~~---+---+---~~---+---+--><br /> >-------+---+---~~---+---+<br /> < optN | 0 | valueN | 0 |<br /> >-------+---+---~~---+---+<br />*/</p><p>struct TFTP_RRWQ<br />{<br /> uint16_t opcode;<br /> char filename[FileLength];<br /> byte flag1;<br /> char Mode[10];<br /> byte flag2;<br /> char options[OPTIONSIZE];<br />};</p><p>/*<br /> 描述:建立RRQ資料包<br /> 返回:資料包大小,資料包指標<br />*/</p><p>int CreateTFTPRRQ()<br />{<br /> struct TFTP_RRWQ package;<br /> char *ptr=TFTPdata;</p><p> package.opcode=htons(1);</p><p> memcpy(ptr,(char*)&package.opcode,sizeof(package.opcode));<br /> ptr+=sizeof(package.opcode);</p><p> strcpy(package.filename,filename.c_str());</p><p> memcpy(ptr,package.filename,strlen(package.filename));<br /> ptr+=strlen(package.filename);</p><p> package.flag1=0x00;<br /> memcpy(ptr,&package.flag1,sizeof(package.flag1));<br /> ptr+=sizeof(package.flag1);</p><p> strcpy(package.Mode,"netascii"); //netascii對於ascii檔案,octet對於二進位檔案<br /> memcpy(ptr,package.Mode,strlen(package.Mode));<br /> ptr+=strlen(package.Mode);<br /> package.flag2=0x00;<br /> memcpy(ptr,&package.flag2,sizeof(package.flag2));<br /> ptr+=sizeof(package.flag2);</p><p> //confignate options<br /> char *p=package.options;<br /> memcpy(p,"blksize",sizeof("blksize"));<br /> p+=strlen(package.options);<br /> memset(p,0x00,sizeof(byte));<br /> p+=sizeof(byte);<br /> memcpy(p,"512",sizeof("512"));<br /> p+=strlen("512");<br /> memset(p,0x00,sizeof(byte));<br /> p+=sizeof(byte);</p><p> memcpy(ptr,&package.options,(p-package.options));<br /> ptr+=(p-package.options);<br /> return (ptr-TFTPdata);<br />}<br />

 

注意:這裡的TFTP協議為最新協議,與傳統1350相比效能,安全等方面更加最佳化,具體詳見RFC2347,2348,2349

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.