TCP檔案傳送

2021-07-10 11:14:30 字數 2102 閱讀 5911

這幾天看網路方面的東西,寫了乙個簡單的檔案傳送的serve/client 的demo;能實現簡單的檔案傳送. 用乙個while迴圈來遍歷整個文字檔案,每次讀到的資料,傳送到客戶端,在客戶端,開啟乙個檔案,每次讀到資料後,寫入檔案,知道伺服器端讀到的資料長度小於其預定長度,則說明檔案已經讀完。

#include #include #include #include #include #include #include #include #include #include #include #define   maxline    1024

void my_err(const char *err_string,int line)

int main(int argc,char *argv)

if((fp=open(argv[2],o_wronly | o_creat | o_excl,s_irusr | s_iwusr))==-1)

//建立乙個tcp套接字

if((sock_fd=socket(af_inet,sock_stream,0))<0)

//設定該套接字使之可以重新繫結埠

optval=1;

if((setsockopt(sock_fd,sol_socket,so_reuseaddr,&optval,sizeof(optval)))<0)

//初始化

memset(&serv_addr,0,sizeof(struct sockaddr_in));

serv_addr.sin_family=af_inet;

serv_addr.sin_port = htons(atoi(argv[1]));

serv_addr.sin_addr.s_addr = htonl(inaddr_any);

//繫結

if((bind(sock_fd,(struct sockaddr *)&serv_addr,sizeof(struct sockaddr_in)))<0)

//監聽

if((listen(sock_fd,5))<0)

while(1)

bzero(buf,maxline);

while(recv_len = recv(link_fd,buf,maxline,0))

write_len=write(fp,buf,recv_len);

if(write_len 2.client.c

#include #include #include #include #include #include #include #include #include #include #define maxline 1024

void my_err(const char *err_string,int line)

int main(int argc,char *argv)

if((fp=open(argv[3],o_rdonly))<0)

//建立乙個socket

if((sock_fd=socket(af_inet,sock_stream,0))<0)

//初始化

memset(&clie_addr,0,sizeof(struct sockaddr_in));

clie_addr.sin_family=af_inet;

clie_addr.sin_port=htons(atoi(argv[2]));

if(inet_aton(argv[1],&clie_addr.sin_addr)<0)

//建立連線

conn_fd=connect(sock_fd,(struct sockaddr *)&clie_addr,sizeof(struct sockaddr));

if(conn_fd<0)

bzero(buf,maxline);

while((read_len=read(fp,buf,maxline))>0)

bzero(buf,maxline);

}close(fp);

close(sock_fd);

printf("傳送成功!\n");

return 0;

}

如果在兩台電腦上,前提得連網在一台電腦上執行serve.c,在另外一台電腦上執行client.c,當然也可以在一台電腦上的兩個終端上執行,

java socke傳送tcp訊息

前言 因實際需求,第三方提供了乙個ip乙個埠,加一段報文和報文引數的說明就需要開發,呼叫介面。最開始也是懵,後來才醒悟是socket tcp請求不需要太難 string info try info buffer.tostring 4.關閉連線 br.close sck.close is.close ...

tcp傳送帶外資料

伺服器端 testnet include using namespace std include include include include include include include include include include define buf size 1024 int main...

TCP之ACK傳送場景

我現在的理解,在有以下幾種情景,tcp會把ack包發出去 1.收到1個包,啟動200ms定時器,等到200ms的定時器到點了 第二個包沒來 於是對這個包的確認ack被傳送。這叫做 延遲傳送 2.收到1個包,啟動200ms定時器,200ms定時器還沒到,第二個資料報又來了 兩個資料報乙個ack 3.收...