tcp傳送帶外資料

2021-07-02 13:14:14 字數 2040 閱讀 3118

伺服器端 testnet

#include using namespace std;

#include#include#include#include#include#include#include#include#include#include#define buf_size 1024

int main(int argc,char * argv)

const char * ip=argv[1];

int port=atoi(argv[2]);

struct sockaddr_in server_address;

bzero(&server_address,sizeof(server_address));

server_address.sin_family=af_inet;

inet_pton(af_inet,ip,&server_address.sin_addr);//在點分位址和二進位制位址之間轉換,第二個引數是點分位址,第三個引數是二進位制整數

server_address.sin_port=htons(port);//主機位元組序轉換為網路位元組序

int sockfd=socket(pf_inet,sock_stream,0);//1

assert(sockfd>=0);

int ret=bind(sockfd,(struct sockaddr*)&server_address,sizeof(server_address));//2

assert(ret!=-1);

ret=listen(sockfd,5);

assert(ret!=-1);

struct sockaddr_in client;

socklen_t client_addrlength=sizeof(client);

int connfd=accept(sockfd,(struct sockaddr*)&client,&client_addrlength);

if(connfd<0)

printf("errno is :%d\n",errno);

else

close(sockfd);

return 0;

}

客戶端 testcplus

#include#include#include#include#include#include#includeint main(int argc,char * argv)

const char * ip=argv[1];

int port=atoi(argv[2]);

struct sockaddr_in server_address;

bzero(&server_address,sizeof(server_address));

server_address.sin_family=af_inet;

inet_pton(af_inet,ip,&server_address.sin_addr);//在點分位址和二進位制位址之間轉換,第二個引數是點分位址,第三個引數是二進位制整數

server_address.sin_port=htons(port);//主機位元組序轉換為網路位元組序

int sockfd=socket(pf_inet,sock_stream,0);

assert(sockfd>=0);

if(connect(sockfd,(struct sockaddr*)&server_address,sizeof(server_address))<0)

else

close(sockfd);

return 0;

}

./testcplus 172.18.216.66 55555

./testnet 172.18.216.66 55555

tcpdump -ntx -i eth0 port 55555

實驗得知,在帶外資料abc中,僅有最後乙個字元c被伺服器當成真正的帶外資料接收。伺服器的正常資料的接收將被帶外資料截斷。

flag引數只對send和recv的當前呼叫有效。

帶外資料的程式設計實現

驗證帶外資料的傳送與接收的各種方式。利用帶外資料原理設計並實現客戶 伺服器心搏函式。用於發現對端主機或到對端的通訊路徑的過早失效。假設每1 秒鐘輪詢一次,若持續5 秒鐘沒有聽到對端應答則認為對端已不再存活,這些值可以有應用程式改動。1.客戶 伺服器心搏機制 每隔1 秒鐘向伺服器傳送乙個帶外位元組,伺...

TCP連線,資料傳送,結束。

那麼在tcp三次握手過程中做了哪些事呢?先來看看tcp報文段首部的格式 tcp客戶端在第一次握手時會向伺服器端傳送乙個報文段,沒有傳送資料,會將原埠號和目地埠號,初始化報文的序號,並將syn標緻置為1,表明現在是哪兩個程序之間在建立鏈結 傳送的初始序列號是多少等,客戶端能接收的報文大小的視窗是多大等...

TCP協議接收與傳送資料

tcp 建立連線通道 資料無限制 速度慢可靠 tcp協議傳送資料 1 建立傳送端的socket物件 這一步如果成功,就說明連線已經建立成功了。2 獲取輸出流,寫資料 3 釋放資源 public static void main string args throws ioexception tcp協議...