select client
#include <stdio.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <arpa/inet.h>
#include <string.h>
#include <unistd.h>
#include <sys/select.h>
#include <sys/time.h>
#define ERR_MSG(msg) do{\
fprintf(stderr, "line:%d: %s %s\n", __LINE__, __FILE__, __func__);\
perror(msg);\
}while(0)
#define PORT 6666
int main(int argc, const char *argv[]) {
int sfd = socket(AF_INET, SOCK_STREAM, 0);
if (sfd < 0) {
ERR_MSG("socket");
return -1;
}
int reuse = 1;
if (setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0) {
ERR_MSG("setsockopt");
return -1;
}
printf("允许端口快速重用成功 __%d__\n", __LINE__);
struct sockaddr_in sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(PORT);
sin.sin_addr.s_addr = inet_addr("192.168.2.58");
socklen_t addrlen = sizeof(sin);
fd_set readfds, tempfds;
FD_ZERO(&readfds);
FD_ZERO(&tempfds);
FD_SET(0, &readfds);
int maxfd = sfd;
int s_res;
char buf[128];
connect(sfd, (struct sockaddr *) &sin, addrlen);
while (1) {
tempfds = readfds;
s_res = select(sfd + 1, &tempfds, NULL, NULL, NULL);
if (s_res < 0) {
ERR_MSG("select");
return -1;
} else if (0 == s_res) {
printf("time out...\n");
break;
}
for (int i = 0; i <= sfd + 1; i++) {
if (0 == i) {
fscanf(stdin, "%s", buf);
while (getchar() != 10);
if (send(sfd, buf, sizeof(buf), 0) < 0) {
ERR_MSG("send");
return -1;
}
printf("send success __%d__\n", __LINE__);
} else if (sfd == i) {
printf("qweqwe");
bzero(buf, sizeof(buf));
if (recv(i, buf, sizeof(buf), 0) < 0) {
ERR_MSG("recv");
return -1;
}
printf("%s", buf);
}
}
}
close(sfd);
return 0;
}