在process.c的基礎上,繼續變換方案,將使用到readv和writev。並且使用到向量方式進行資料的傳送和接收。並在收到相應的訊號後釋放資源。
#include #include #include #include #include static struct iovec*vs=null,*vc=null;
void process_conn_server(int s) /*伺服器對客戶端的處理*/
vs = v; /**掛接全域性變數,便於釋放管理*/
/*每個向量10個位元組的空間*/
v[0].iov_base = buffer; /*0~9*/
v[1].iov_base = buffer + 10; /*10~19*/
v[2].iov_base = buffer + 20; /*20~29*/
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
/*初始化長度為10*/
for(;;)
/*構建響應字元,為接收到客戶端位元組的數量,分別放到3個緩衝區中*/
sprintf(v[0].iov_base, "%d ", size); /*長度*/
sprintf(v[1].iov_base, "bytes alt"); /*「bytes alt」字串*/
sprintf(v[2].iov_base, "ogether\n"); /*「ogether\n」字串*/
/*寫入字串長度*/
v[0].iov_len = strlen(v[0].iov_base);
v[1].iov_len = strlen(v[1].iov_base);
v[2].iov_len = strlen(v[2].iov_base);
writev(s, v, 3); /*發給客戶端*/
} }/*客戶端的處理過程*/
void process_conn_client(int s)
/**掛接全域性變數,便於釋放管理*/
vc = v;
/*每個向量10個位元組的空間*/
v[0].iov_base = buffer; /*0~9*/
v[1].iov_base = buffer + 10; /*10~19*/
v[2].iov_base = buffer + 20; /*20~29*/
/*初始化長度為10*/
v[0].iov_len = v[1].iov_len = v[2].iov_len = 10;
int i = 0;
for(;;)
}} }
}/*訊號sigint的處理函式*/
void sig_proccess(int signo)
/*訊號sigpipe的處理函式*/
void sig_pipe(int sign)
TCP服務端和客戶端(1)
在陳述這個小例項之前,首先將mafile寫出來 makefile all client server all規則,他依賴於client和server規則 client tcp process.o tcp client.o client規則生成客戶端程式 gcc o client tcp proces...
TCP服務端和客戶端 9
繼續對process.c 進行改進,用recvmsg和sendmsg來進行替換。將向量掛載到msghdr的msg iov的成員變數上進行操作。include include include include include include include static struct iovec vs ...
TCP客戶端服務端demo
服務端程式 include include include include include include include int main 列印握手成功的客戶端 struct sockaddr in servaddr socklen t nservlen sizeof servaddr getso...