伺服器端 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協議...