亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? tcpserver.c

?? 用AVR單片機和RTL8019實現TCP/IP協議.支持ARP,PING,UDP,TCP,HTML網頁顯示等功能.
?? C
?? 第 1 頁 / 共 2 頁
字號:
   else if( (tcp_remote_dsz==0)&&(tcp_remote_flag!=0)&&(tcp_remote_flag!=TCP_SYN)) 
  {
     TCP_MY_SEQ=tcp_remote_ack;                      // 處于建立過程的非第一次數據回復
     TCP_MY_ACK=tcp_remote_seq+1;                    // ACK序號值加1
  }
   else if(tcp_remote_dsz!=0) 
  {
     TCP_MY_SEQ=tcp_remote_ack;                      // 處于已經建立后數據回復
     TCP_MY_ACK=tcp_remote_seq+tcp_remote_dsz;       // ACK序號值加收到的數據長度 
  }
  
 //***以下代碼根據目前狀態及當前數據,判斷執行何種操作***
 //A. 通信復位 
 //B. 已建立連接狀態下進行數據接收處理
 //C. 進入TCP連接建立過程
 //根據狀態判斷選擇執行內容
 if ( (tcp_remote_flag&TCP_RST)!=0x00 )
   {
    //debuG
	uart_send('R');
	uart_send('S');
	uart_send('T');
	uart_send(' ');
	//debuG
    TCP_STATE=TCP_LISTEN;                            // 如果收到復位標志,則進入TCP_LISTEN狀態
	tcp_init_sw(1);
   }
 else if( (TCP_STATE==TCP_ESTABLISHED)&&((tcp_remote_flag&TCP_FIN)==0)&&(tcp_remote_flag!=TCP_SYN ))
   {
    //debuG
	uart_send('D');
	uart_send('A');
	uart_send('T');
    uart_send('S');
	uart_send(0x0d);	
	uart_send(0x0a);	
    uart_send(0x0d);	
	uart_send(0x0a);	
	//debuG
	// 這種條件表示收到實質性的數據

    tcp_port_handle();                               // 如果已建立連接,且收到的不是連接終止信號
                                                     // 則進行有效接收數據處理 。。。
    //debuG
	uart_send(0x0d);	
	uart_send(0x0a);	
	uart_send('D');
	uart_send('A');
	uart_send('T');
    uart_send('E');
	uart_send(0x0d);	
	uart_send(0x0a);	
    uart_send(0x0d);	
	uart_send(0x0a);	
	//debuG
   }
 else 
    tcp_state_machine(tcp_remote_flag);              // 調用TCP STATE轉換程序處理
}

//**********************************
//*  TCP SERVER數據發送
//**********************************
void tcpserver_send_data(unsigned int data_length,unsigned char hdr_sz,unsigned char flag)
{
 unsigned char temp0;
 unsigned char temp1;
 unsigned int  temp2;
 unsigned int  temp3;
 unsigned long temp4;
 // 1.ETHERNET部分數據構建,只對MAC進行處理,FRAME TYPE不邊
 //   a.對已收到的ETHERNET數據包目標NAC地址和源MAC地址相互交換
 for(temp0=0;temp0<6;temp0++)
 {
  temp1=read_62256(SRCMAC0+temp0);
  write_62256(DESMAC0+temp0,temp1);
 }
 for(temp0=0;temp0<6;temp0++)
  write_62256(SRCMAC0+temp0,SYSMAC[temp0]); 
  
 // 2.TCP部分數據構件,大部分參數保存在全局變量中
 //   a.TCP端口源端口和目的端口互換
 temp0=read_62256(TCP_SRC_PORT);
 temp1=read_62256(TCP_DES_PORT);
 write_62256(TCP_SRC_PORT,temp1);
 write_62256(TCP_DES_PORT,temp0);
 temp0=read_62256(TCP_SRC_PORT+1);
 temp1=read_62256(TCP_DES_PORT+1);
 write_62256(TCP_SRC_PORT+1,temp1);
 write_62256(TCP_DES_PORT+1,temp0);
 //   b.設置數據順序號
 write_62256(TCP_SEQ_NO,(TCP_MY_SEQ>>24)&0x000000FF);
 write_62256(TCP_SEQ_NO+1,(TCP_MY_SEQ>>16)&0x000000FF);
 write_62256(TCP_SEQ_NO+2,(TCP_MY_SEQ>>8)&0x000000FF);
 write_62256(TCP_SEQ_NO+3,TCP_MY_SEQ&0x000000FF);
 //   c.設置數據確認號
 write_62256(TCP_ACK_NO,(TCP_MY_ACK>>24)&0x000000FF);
 write_62256(TCP_ACK_NO+1,(TCP_MY_ACK>>16)&0x000000FF);
 write_62256(TCP_ACK_NO+2,(TCP_MY_ACK>>8)&0x000000FF);
 write_62256(TCP_ACK_NO+3,TCP_MY_ACK&0x000000FF);
 //   d.設置TCP數據頭長度
 write_62256(TCP_HDR_SZ,hdr_sz<<2);                // 20*4=80(0x50) /24*4=96(0x60)
 //   e.設置FLAG數值
 write_62256(TCP_FLAG,flag);                       // FLAG由上層程序制定
 //   f.設置TCP數據WINDOW SIZE
 write_62256(TCP_WIN_SZ,TCP_MY_MSS>>8);           // WINDOW SIZE與最大接收數相同
 write_62256(TCP_WIN_SZ+1,TCP_MY_MSS&0X00FF);    //
 //   g.設置CHECKSUM先置0
 write_62256(TCP_CSUM,0x00);                       // checksum先置0
 write_62256(TCP_CSUM+1,0x00);
 //   h.設置URGENT POINT置0
 write_62256(TCP_GUR_PT,0x00);                     // URGENT POINT置0
 write_62256(TCP_GUR_PT+1,0x00);
 //   i.如有OPTION設置(默認設置MSS),如沒有跳過
 if(hdr_sz!=20)
 {
  write_62256(TCP_OPTION,2);                       // OPTION TYPE=2
  write_62256(TCP_OPTION+1,4);                     // OPTION LENGTH=4
  write_62256(TCP_OPTION+2,TCP_MY_MSS>>8);         // OPTION MSS高8位
  write_62256(TCP_OPTION+3,TCP_MY_MSS&0X00FF);     // OPTION MSS低8位
 }
 //  j.設置TCP數據包的數據內容,內容長度data_length(<=TCP_MAX_SEND)
 //    上層程序負責將數據寫入
 //  k.TCP_CHECK_SUM計算
  temp3=data_length+hdr_sz;
  temp2=tcp_check_sum(temp3);                     // tcp checksum計算,數據頭+數據
  write_62256(TCP_CSUM,temp2>>8);
  write_62256(TCP_CSUM+1,temp2&0x00FF);
  
 // 3.IP數據頭構建,在原數據基礎上修改,修改內容包括TOTAL LENGTH,ID
 //   a.修改IP頭的TOTAL LENGTH數據
  temp3=data_length+hdr_sz+20;                    // TCP+IP總長度
  write_62256(IP_TOL_LEN,temp3>>8);
  write_62256(IP_TOL_LEN+1,temp3&0X00FF);
 //   c.修改IP頭的16位ID
  temp2=read_62256(IP_ID_ADD);                    // IP頭數據中ID標識區數據加1
  temp1=read_62256(IP_ID_ADD+1);
  temp2=(temp2<<8)+temp1;
  temp2=temp2-1;
  write_62256(IP_ID_ADD+1,temp2);
  write_62256(IP_ID_ADD,temp2>>8);
 //   d.IP頭的16位head checksum置0 
 write_62256(IP_HDR_CSUM,0x00);                    // IP頭CHECKSUM部分至0x0000
 write_62256(IP_HDR_CSUM+1,0x00);
 //   e.IP地址互換
 for(temp0=0;temp0<4;temp0++)                      // 設置目標IP地址
 {
  temp1=read_62256(IP_SRC_IP0+temp0);
  write_62256(IP_DES_IP0+temp0,temp1);
 }
 for(temp0=0;temp0<4;temp0++)
   write_62256(IP_SRC_IP0+temp0,SYSIP[temp0]);     //  設置本機IP地址
 //   f.修改IP的CHECKSUM
 temp2=ip_cal_csum();                              //  IP頭chechsum計算
 write_62256(IP_HDR_CSUM+1,temp2);              
 write_62256(IP_HDR_CSUM,temp2>>8);
 
 //4.數據發送
 temp2=20+hdr_sz+data_length;                     // 注意了...,數據長度要大于46
 if(temp2<46)                                     // 不大于46怎么也調不出來
 {
   temp2=46-temp2;   
   for(temp0=0;temp0<temp2;temp0++)                             
       write_62256(TCP_SRC_PORT+hdr_sz+data_length+temp0,0x00);  // 不夠的補上0
 }
 else temp2=0;
 sendpacket(data_length+hdr_sz+0x22+temp2);          //  發送數據
}

//************************************
//      TCP數據包頭CHECKSUM
//************************************
unsigned int tcp_check_sum(unsigned int length)
{
 unsigned char temp;
 unsigned int i;
 unsigned long datah=0x00000000;
 unsigned int data=0x0000;
 //***TCP CHECK分為兩部分,TCP和dumpheader***
 //1.以下對TCP數據段進行求和處理
 if( (length&0x0001)==0x0000 )                 // a1.偶數處理
 {
 for(i=0;i<length;i=i+2)
 {
  data=read_62256(i+TCP_SRC_PORT);             // 高位數值xxxxabcd
  datah=datah+(data<<8);                       // 形成數值xxxxabcdxxxx
  temp=read_62256(i+TCP_SRC_PORT+1);
  datah=datah+temp;
  //仔細研究一下為什么回出錯??????????
  //datah=datah+read_62256(i+TCP_SRC_PORT+1);   // 形成數值xxxxabcdefgh
 }
  }
 else                                          // a2.奇數處理
 {
 for(i=0;i<(length-1);i=i+2)
 {
  data=read_62256(i+TCP_SRC_PORT);             // 高位數值xxxxabcd
  datah= datah+(data<<8);                      // 形成數值xxxxabcdxxxx
  temp=read_62256(i+TCP_SRC_PORT+1);
  datah=datah+temp;
  //datah=datah+read_62256(i+TCP_SRC_PORT+1);    // 形成數值xxxxabcdefgh
  }
  data=read_62256(length+TCP_SRC_PORT-1);     // 高位數值xxxxabcd
  datah=datah+(data<<8);                      // 形成數值xxxxabcdxxxx
  datah=datah+0x00;                           // 形成數值xxxxabcdefgh
  }
 //2.對dumpheader部分求和
 data=0x0000;
 for(i=0;i<8;i=i+2)                            // b.對源和目的IP地址求和
 {
  data=read_62256(i+IP_SRC_IP0);               // 高位數值xxxxabcd
  datah= datah+(data<<8);                      // 形成數值xxxxabcdxxxx
  temp=read_62256(i+IP_SRC_IP0+1);
  datah=datah+temp;                            // 形成數值xxxxabcdefgh
 }
  datah=datah+length;                          // c.加上TCP位長度,共有16位
  datah=datah+0x0006;                          // d.加上協議標志,僅有8位
  while( ( data=(datah>>16) )!=0x0000 )
  {
   datah=(datah&0x0000ffff)+data;
  }
  
  data=datah&0x0000ffff;
  data=0xFFFF-data;
 return data;
}

//**********************************
//*  TCP端口選擇及數據處理
//**********************************
void tcp_port_handle(void)
{
 unsigned char data;
 unsigned int port;                           // tcp port
 port=read_62256(TCP_DES_PORT);               // xxab
 port=(port<<8);                              // abxx
 data=read_62256(TCP_DES_PORT+1);
 port=port+data;                              // abcd計算出TCP PORT的值
 if(port==80)                                 // http();      
{                                             // 執行具體應用程序
 http_handle();
}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品欧美久久久久一区二区| 韩国v欧美v日本v亚洲v| 日本少妇一区二区| av一区二区不卡| 欧美成人bangbros| 亚洲午夜免费电影| 91免费国产在线观看| 欧美精品一区二区高清在线观看 | 91在线无精精品入口| 91麻豆精品国产综合久久久久久| 中文字幕日本乱码精品影院| 国产真实乱对白精彩久久| 7777精品伊人久久久大香线蕉经典版下载 | aaa亚洲精品| xvideos.蜜桃一区二区| 精品国产一区久久| 99精品久久只有精品| 日韩三级免费观看| 亚洲国产一区二区视频| www.日韩在线| 国产拍揄自揄精品视频麻豆| 老汉av免费一区二区三区| 欧美久久久久久久久| 一区二区三区四区激情| 97超碰欧美中文字幕| 国产精品灌醉下药二区| 成人黄色小视频| 国产日韩综合av| 国产自产视频一区二区三区| 精品国产1区2区3区| 国产精品91xxx| 亚洲国产高清不卡| 国产91精品一区二区麻豆亚洲| 欧美一区二区在线观看| 日本免费新一区视频| 51精品视频一区二区三区| 视频在线观看91| 欧美一区二区女人| 欧美日韩视频在线第一区| 夜夜亚洲天天久久| 69av一区二区三区| 国产揄拍国内精品对白| 国产视频一区不卡| 91在线播放网址| 亚洲影院久久精品| 69堂精品视频| 韩国v欧美v日本v亚洲v| 国产欧美一区二区精品性色超碰 | 色综合色狠狠天天综合色| 中文字幕制服丝袜一区二区三区| 成年人午夜久久久| 一区二区三区中文字幕在线观看| 欧美日韩国产综合视频在线观看| 美女网站在线免费欧美精品| 久久精品人人做人人爽97| 99国产欧美久久久精品| 日韩电影在线一区二区| 久久精品免费在线观看| 色偷偷久久人人79超碰人人澡| 亚洲成人自拍一区| 国产香蕉久久精品综合网| 日本精品一级二级| 久久国产乱子精品免费女| 国产欧美日韩久久| 欧美视频一区二| 激情图区综合网| 亚洲精品一二三四区| 欧美日韩午夜影院| 岛国精品一区二区| 天堂va蜜桃一区二区三区漫画版| 久久精品夜色噜噜亚洲aⅴ| 国产日韩亚洲欧美综合| 欧美午夜一区二区三区免费大片| 免费视频最近日韩| 国产精品电影院| 日韩精品一区二区三区视频| 91麻豆文化传媒在线观看| 麻豆91在线播放| 一区二区三区在线视频播放| 精品国产乱码久久久久久图片| 99re热视频精品| 久久99精品久久只有精品| 亚洲欧美日韩在线不卡| 日韩欧美久久久| 欧美在线视频全部完| 成人午夜短视频| 九九视频精品免费| 亚洲国产日韩精品| 成人欧美一区二区三区视频网页| 欧美一级专区免费大片| 91国内精品野花午夜精品| 国产精品一线二线三线精华| 免费久久99精品国产| 亚洲成av人影院| 亚洲资源中文字幕| 一区二区三区在线观看欧美| 国产精品三级电影| 久久免费国产精品| 日韩精品在线看片z| 欧美精品久久99| 欧美日韩在线观看一区二区 | 欧洲人成人精品| 成人高清免费观看| 国产丶欧美丶日本不卡视频| 日本伊人色综合网| 午夜视黄欧洲亚洲| 日韩在线一区二区三区| 爽爽淫人综合网网站| 日韩av电影天堂| 蜜臀av一区二区在线免费观看 | 亚洲一区二区综合| 樱桃国产成人精品视频| 一级做a爱片久久| 亚洲永久精品大片| 亚洲久草在线视频| 亚洲一区二区三区在线看| 亚洲国产aⅴ成人精品无吗| 一区二区三区四区国产精品| 亚洲一级二级三级| 天堂久久久久va久久久久| 免费高清在线一区| 国产一区二三区好的| 成人性生交大片| 91丨九色丨国产丨porny| 色婷婷av一区二区三区之一色屋| 在线观看成人小视频| 欧美一区二区三区的| 久久综合久久综合亚洲| 中文字幕第一区综合| 亚洲久本草在线中文字幕| 香蕉久久夜色精品国产使用方法| 免费观看91视频大全| 国产成人一级电影| 91久久精品一区二区三区| 91精品在线观看入口| 国产人伦精品一区二区| 亚洲男人的天堂av| 日本亚洲欧美天堂免费| 国产+成+人+亚洲欧洲自线| 色婷婷av一区二区三区gif| 欧美一区二区三区在线视频| 国产亚洲成年网址在线观看| 亚洲六月丁香色婷婷综合久久| 日韩成人午夜电影| 成人h动漫精品| 欧美老肥妇做.爰bbww| 久久九九久精品国产免费直播| 亚洲精品成人少妇| 韩日欧美一区二区三区| 一本久道久久综合中文字幕| 日韩欧美一区二区免费| 国产精品久久久久久久久久免费看 | 国产精品乱码一区二三区小蝌蚪| 亚洲一区二区三区四区的| 国产精品亚洲一区二区三区妖精 | 久久一区二区三区国产精品| 亚洲另类一区二区| 国产一区二区三区国产| 欧美日韩免费一区二区三区视频| 国产女人aaa级久久久级| 爽好多水快深点欧美视频| 99精品欧美一区二区三区小说| 日韩一区二区在线看片| 亚洲综合久久久久| 成人晚上爱看视频| 26uuu欧美| 秋霞午夜av一区二区三区 | 国产一区二区剧情av在线| 欧美在线免费观看亚洲| 亚洲国产精品精华液2区45| 日日夜夜免费精品| 一本一道波多野结衣一区二区| 欧美精品一区二区三区蜜桃 | 亚洲成人一区在线| 成人ar影院免费观看视频| 26uuu色噜噜精品一区| 日韩精品一二三四| 在线免费观看不卡av| 久久精品亚洲乱码伦伦中文| 日韩电影在线一区二区| 欧美日韩激情一区二区三区| 国产精品黄色在线观看| 国产麻豆视频一区二区| 欧美本精品男人aⅴ天堂| 日本午夜一区二区| 欧美精品高清视频| 视频一区欧美日韩| 精品视频在线免费观看| 一区二区三区四区高清精品免费观看| 国产999精品久久| 国产精品美女久久久久aⅴ| 国产福利一区二区三区| 久久久久久亚洲综合影院红桃| 精品一区二区三区久久久| 日韩欧美一区二区在线视频| 日本视频免费一区| 精品日韩成人av| 国产精品99久久不卡二区| 中文字幕欧美区| 色综合久久久久网|