tcp reflect server & client
tcp回射伺服器。學習了《unp》的第五章前面的知識,自己把**敲出來了,加深了理解吧。
簡單地說就是,client傳送給server一條訊息(一行文字),server再將同樣地訊息傳送回client。
就像這樣:
用到的函式和api包括:
1) socket api — 建立套接字,負責建立基本的通訊。
2) void str_cli( file *fp, int socketfd ); — 讀寫相關資訊
3) ssize_t readline( int fd, char *vptr, size_t maxlen); — 讀取一行文字資料
readline稍微解釋下
4) static ssize_t my_read( int fd, char *ptr ); — 一次乙個位元組的讀取資料
5) ssize_t readn( int fd, char *vptr, size_t n ); — 完整讀取n個位元組
以及一些常用的i/o函式(api)
看懂了原理之後,自己親自寫出來了**,感覺太棒了。:d
#include #include #include #include #include #include #include #include #include #define maxline 1024
#define sa struct sockaddr
void err_sys( char *str, int num );
void str_cli( file *p, int socketfd );
size_t readline( int fd, char *buffer, size_t length );
static size_t my_read( int fd, char *ptr );
size_t writen( int fd, char *buffer, size_t length_buffer );
int main( int argc, char *argv )
void str_cli( file *fp, int socketfd )
}/*write n byte to the descriptor*/
ssize_t writen( int fd, char *buffer, size_t n )
nleft -= nwrite;
ptr += nwrite;
} return n;
}/*read a line from the descripotr*/
static int read_cnt;
static char *read_ptr;
static char read_buffer[maxline];
static size_t my_read( int fd, char *ptr )
else if( read_cnt == 0 )
return ( 0 );
read_ptr = read_buffer;
} read_cnt--;
*ptr = *read_ptr++;
return ( 1 );
}size_t readline( int fd, char *vptr, size_t maxlen )
else if( rc == 0 )
else
return ( -1 );
} *ptr = 0;
return ( n );
}void err_sys( char *str, int num )
用到的函式和api包括:
1) socket api — 建立套接字,負責建立基本的通訊。
2) ssize_t readn( int fd, char *vptr, size_t n ); — 完整讀取n個位元組
3) void str_echo( int socketfd); ---向客戶端輸出資訊
唯一多了乙個就是考慮到多個客戶端連線請求伺服器的情況,呼叫了系統呼叫fork()
#include #include #include #include #include #include #include #include #include #define maxline 1024
#define sa struct sockaddr
void err_sys( char *str, int num );
void str_echo( int socketfd );
int main( int argc, char *argv )
close( connefd );
} return 0;
}void str_echo( int socketfd )
void err_sys( char *str, int num )
TCP 回射伺服器
本例為多程序的 tcp 回射程式 服務端 include intmain int argc,char ar close connfd 父程序斷開連線 void str echo int sockfd 套接字 sockaddr in cliaddr,servaddr 網際套接字位址結構,包含協議族 i...
Linux C 回射伺服器
回射伺服器就是服務端將客戶端的資料傳送回去。我實現的回射伺服器返回增加了時間。服務端 可以很容易看懂 cpp view plain copy include include include include include include include include include define ...
使用執行緒的TCP回射伺服器程式
使用執行緒緣由 1 fork 代價昂貴 2 fork 返回之後父子程序資訊傳遞需要通過ipc機制 同一程序內的執行緒除共享全域性變數外還共享 a 程序指令 b 大多數資料 c 開啟的檔案描述符 d 訊號處理函式和處理 e 當前工作目錄 f 使用者id和組id 不過每個執行緒有各自的 a 執行緒id ...