我有兩個程序與TCP/IP通信。 這工作正常。TCP流繼電器
程序A打開一個TCP套接字。程序B連接到此套接字。 程序B給程序A提供數據。 一切正常。
但是當我把A和B之間的中繼 ,只是傳遞字節流,出了點問題。
程序C打開兩個TCP套接字(socket1,socket2)。程序B連接到這個套接字(套接字1)。程序A連接到這個套接字(套接字2)。
程序C使用以下代碼從B傳遞TCP到A到A. (這是基於Linux)
char buf[BUFSIZE];
while(1){
// recv a packet segment
if(my_recv(socket1, buf, BUFSIZE) <= 0){
return 0;
}
if(send(socket2, buf, BUFSIZE, MSG_NOSIGNAL) != BUFSIZE){
return 0;
}
}
my_recv爲recv的,以保證它會RECV 請求大小的包裝。
int my_recv(int sd, char* p, unsigned int len){
// recv a packet segment
unsigned int ssize=0;
int d;
while(ssize < len){
if((d=recv(sd, p+ssize, len - ssize, 0))<=0){
return -1;
}
ssize += d;
}
return ssize;
}
這工作正常,第一次。 但幾秒鐘後,一切都搞砸了。
我已經調試程序A和B. 他們沒有錯。 他們發送和recv正確的順序,但它似乎 繼電器提供虛假數據...
一些意見,將不勝感激。
謝謝你提前。
my_recv是recv的包裝,以保證recv請求的大小。 – daehee
但這也意味着它會阻塞,直到緩衝區被填滿,數據中繼將停止,直到發生這種情況 - 這是搞砸 – mvp
但TCP是無損協議。我認爲數據傳遞可能會延遲,但我不知道爲什麼會傳送損壞的內容。 – daehee