1.含義:同udp相同也是傳輸層的一種協議。(transmission control protocol 傳輸控制協議)。
2.特點:面向連線、傳輸可靠、提供位元組流服務
面向連線:服務端必須與客戶端建立連線。
傳輸可靠:一系列的機制(應答等)保證資料傳輸的可靠性。
提供位元組流服務:傳送資料不會像udp那樣一次傳送(要麼成功,要麼失敗),而是靈活的傳送(能發多少發多少)。
3.流程:
tcp的3次握手,4次揮手
4.實現過程:
(1)建立乙個tcpsocket類封裝相應的功能
(2)服務端程式
(3)客戶端程式
5.存在問題:
服務端一次與乙個客戶端只能通訊一次
6.實現:
多程序實現:
多執行緒實現:#include #include #include "tcp_socket.hpp"
void sigcb(int signo)
int main(int argc, char* ar**)
signal(sigchld, sigcb);
string ip = ar**[1];
uint16_t port = atoi(ar**[2]);
tcpsocket sock;
//1.建立套接字
check_ret(sock.socket());
//2.繫結位址資訊
check_ret(sock.bind(ip,port));
//3.開始監聽
check_ret(sock.listen());
tcpsocket newsock;
while(1)
//if(fork() == 0)
if(fork() == 0)
cout << "client say:" << buf << endl;
//7.傳送資料
buf.clear();
cin >> buf;
newsock.send(buf);
}newsock.close();
exit(0);
}newsock.close();
} //8.關閉套接字
sock.close();
return -1;
}
//多執行緒:服務端程式
#include #include "tcp_socket.hpp"
void* thr_start(void* arg)
cout << "client say:" << buf <> buf;
newsock->send(buf);
} newsock->close();
delete newsock;
return null;
}int main(int argc, char* ar**)
string ip = ar**[1];
uint16_t port = atoi(ar**[2]);
tcpsocket sock;
//1.建立套接字
check_ret(sock.socket());
//2.繫結位址資訊
check_ret(sock.bind(ip,port));
//3.開始監聽
check_ret(sock.listen());
while(1)
pthread_t tid;
//建立新執行緒,讓子執行緒來解決這些問題
pthread_create(&tid, null, thr_start, (void*)newsock);
pthread_detach(tid);
} //8.關閉套接字
sock.close();
return -1;
}
傳輸層 TCP協議
1 序號 在乙個tcp連線中傳送的位元組流中的每乙個位元組都按順序編號,本欄位表示本報文段所傳送資料的第乙個位元組的序號。2 確認號 期望收到對方下乙個報文段的第乙個資料位元組的序號。若確認號為n,則證明到序號n 1為止的所有資料都已正確收到。即採用累計確認 3 資料偏移 首部長度 tcp 報文段的...
傳輸層TCP協議
面向連線,可靠傳輸,面向位元組流 tcp協議 面向連線 accept 獲取新連線 1.當呼叫accept之後,核心就會為新連線建立乙個套接字描述符,服務端使用該套接字描述符進行和客戶端進行資料通訊 2.連線建立之後,雙方都可以傳送資料 確認msg1 確認的行為是傳輸層tcp協議的行為,不是應用層的行...
傳輸層協議TCP
部分埠號 第二次握手 伺服器應用程序被動開啟。若同意客戶端的請求,則發回確認報文,其首部中 syn 1,ack 1,ack x 1,seq y。第三次握手 客戶端收到確認報文之後,通知上層應用程序連線已建立,並向伺服器發出確認報文,其首部 ack 1,ack y 1。當伺服器收到客戶端的確認報文之後...