📄 example75.c
字号:
/* example75.c */
#include <sys/types.h>
#include <sys/socket.h>
#include <arpa/inet.h>
#include <errno.h>
#include <fcntl.h>
#include <stdio.h>
#define BUFLEN 255
int main(int argc, char **argv)
{
struct sockaddr_in servaddr, localaddr;
int sockfd, stdinfd, i, n, flags;
int STDIN_EOF = 0, pos = 0;
char curline[BUFLEN+1],
sndmsg[65535],
rcvmsg[BUFLEN + 1];
if (argc != 2) {
printf("%s <IP address>\n", argv[0]);
exit(0);
}
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
fprintf(stderr, "socket creating error in nbechocli.c\n");
exit(1);
}
memset(&servaddr, 0, sizeof(struct sockaddr_in));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(1234);
if (inet_pton(AF_INET, argv[1], &servaddr.sin_addr) <= 0) {
printf("Wrong IP address!\n");
exit(0);
}
if (connect(sockfd, (struct sockaddr*)(&servaddr), sizeof(struct sockaddr_in)) < 0){
printf("Connection Failure!\n");
exit(0);
}
printf("Connected to host %s\n", argv[1]);
flags = fcntl(sockfd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(sockfd, F_SETFL, flags);
stdinfd = fileno(stdin);
flags = fcntl(sockfd, F_GETFL, 0);
flags |= O_NONBLOCK;
fcntl(stdinfd, F_SETFL, flags);
for ( ; ; ) {
n = read(sockfd, rcvmsg, BUFLEN);
switch (n) {
case 0:
printf("server shutdown the connection!\n");
exit(0);
break;
case -1:
if (errno != EWOULDBLOCK) {
fprintf(stderr, "connection abnormally closed in nbechocli.c!\n");
perror("");
exit(2);
}
break;
default:
rcvmsg[n] = 0;
printf("%s", rcvmsg);
}
if (!STDIN_EOF) {
n = read(stdinfd, curline, BUFLEN);
switch (n) {
case 0:
printf("get eof, connection closed!\n");
STDIN_EOF = 1;
if (pos == 0)
shutdown(sockfd, 1);
break;
case -1:
if (errno != EWOULDBLOCK) {
fprintf(stderr, "error happened in stdin in nbechocli.c\n");
perror("");
exit(3);
}
break;
default:
curline[n] = 0;
strcpy(sndmsg + pos, curline);
pos += (n + 1);
}
}
if (pos > 0) {
n = write(sockfd, sndmsg, strlen(sndmsg));
if (n == -1) {
if (errno != EWOULDBLOCK) {
fprintf(stderr, "socket write error in n bechocli.c!\n");
exit(4);
}
}
else {
for (i = n + 1; i < pos; i++)
sndmsg[i-n-1] = sndmsg[i];
pos -= (n+1);
if (pos == 0)
if (STDIN_EOF)
shutdown(sockfd, 1);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -