服务器代码使用《select在标准输出和套接字上进行监控》里边的selectServerInTCPIPbook.c
代码,gcc selectServerInTCPIPbook.c -o selectServerInTCPIPbook
进行编译,然后执行./selectServerInTCPIPbook 8080
在8080
端口上监听。
关于writev
的使用,可以参考《writev函数的使用测试》。
writevToSocket.c
里边的代码如下:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<unistd.h>
#include<arpa/inet.h>
#include<sys/socket.h>
int main(int argc, char **argv) {
if (argc != 3) {
printf("usage: select01 <IPaddress> or <Port>");
}
int socket_fd;
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
struct sockaddr_in server_addr;
bzero(&server_addr, sizeof(server_addr));
server_addr.sin_family = AF_INET;
server_addr.sin_port = htons(atoi(argv[2]));
inet_pton(AF_INET, argv[1], &server_addr.sin_addr);
socklen_t server_len = sizeof(server_addr);
int connect_rt = connect(socket_fd, (struct sockaddr *) &server_addr, server_len);
if (connect_rt < 0) {
printf("connect failed ");
exit(1);
}
char buf[128];
struct iovec iov[2];
char *send_one = "hello,";
iov[0].iov_base = send_one;
iov[0].iov_len = strlen(send_one);
iov[1].iov_base = buf;
while (fgets(buf, sizeof(buf), stdin) != NULL) {
iov[1].iov_len = strlen(buf)-1;//将键盘输入的回车符截掉
int n = htonl(iov[1].iov_len);
if (writev(socket_fd, iov, 2) < 0)
printf("writev failure");
}
exit(0);
}
这段代码会向服务器端发送hello,
加上你输入的字符串,比如你要是输入了test
,那么往服务器端发送的是hello,test
。
gcc writevToSocket.c -o writevToSocket
将代码进行编译,然后./writevToSocket 127.0.0.1 8080
运行程序,然后输入想要发送的字符串之后,按下回车键。
sysconfTest.c
代码如下:
#include<stdio.h>
#include<unistd.h>
int main(int argc,char *argv[]){
printf("%ld\n",sysconf(_SC_IOV_MAX));
return 0;
}
gcc sysconfTest.c -o sysconfTest
将代码进行编译,./sysconfTest
显示出来的结果就是writev 函数一次性最多允许数组的大小
此文章为11月Day 20学习笔记,内容来源于极客时间《网络编程实战》。