TCP服務端和客戶端 9

2021-06-28 08:53:04 字數 2151 閱讀 9469

繼續對process.c**進行改進,用recvmsg和sendmsg來進行替換。將向量掛載到msghdr的msg_iov的成員變數上進行操作。

#include #include #include #include #include #include #include static struct iovec*vs=null,*vc=null;

/*伺服器對客戶端的處理*/

void process_conn_server(int s)

/**掛接全域性變數,便於釋放管理*/

vs = v;

/*初始化訊息*/

msg.msg_name = null; /*沒有名字域*/

msg.msg_namelen = 0; /*名字域長度為0*/

msg.msg_control = null; /*沒有控制域*/

msg.msg_controllen = 0; /*控制域長度為0*/

msg.msg_iov = v; /*掛接向量指標*/

msg.msg_iovlen = 30; /*接收緩衝區長度為30*/

msg.msg_flags = 0; /*無特殊操作*/

/*每個向量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;

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);

sendmsg(s, &msg, 0); /*發給客戶端*/

} }/*客戶端的處理過程*/

void process_conn_client(int s)

/**掛接全域性變數,便於釋放管理*/

vc = v;

/*初始化訊息*/

msg.msg_name = null; /*沒有名字域*/

msg.msg_namelen = 0; /*名字域長度為0*/

msg.msg_control = null; /*沒有控制域*/

msg.msg_controllen = 0; /*控制域長度為0*/

msg.msg_iov = v; /*掛接向量指標*/

msg.msg_iovlen = 30; /*接收緩衝區長度為30*/

msg.msg_flags = 0; /*無特殊操作*/

/*每個向量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服務端和客戶端 8

在process.c的基礎上,繼續變換方案,將使用到readv和writev。並且使用到向量方式進行資料的傳送和接收。並在收到相應的訊號後釋放資源。include include include include include static struct iovec vs null,vc null ...

TCP客戶端服務端demo

服務端程式 include include include include include include include int main 列印握手成功的客戶端 struct sockaddr in servaddr socklen t nservlen sizeof servaddr getso...