TCP服務端和客戶端 8

2021-06-28 08:18:16 字數 1507 閱讀 4732

在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...