📄 net.c
字号:
#include "wput.h"/* Verbosity level */#define PRINT_ALL 0#define PRINT_SOME 1#define PRINT_NOTHING 2int send_msg (char *msg, char *host, int port, int sport, int flag) { int sd, rc, i; struct sockaddr_in localAddr, servAddr; struct hostent *h; char buf[8192];#if defined _WIN32 WORD wVersionRequested = MAKEWORD(1,1); WSADATA wsaData; /* Init winsock: */ WSAStartup(wVersionRequested, &wsaData);#endif /* resolve name */ h = gethostbyname(host); if (h == NULL) { printf("unknown host '%s'\n", host); return (1); } /* fill in server socket structure: */ servAddr.sin_family = h->h_addrtype; memcpy((char *) &servAddr.sin_addr.s_addr, h->h_addr_list[0], h->h_length); servAddr.sin_port = htons(port); /* create socket */ sd = socket(AF_INET, SOCK_STREAM, 0); if (sd < 0) { perror("cannot open socket "); return (1); } /* bind any port number */ localAddr.sin_family = AF_INET; localAddr.sin_addr.s_addr = htonl(INADDR_ANY); if (r_flag) localAddr.sin_port = htons(sport); else localAddr.sin_port = htons(0); rc = bind(sd, (struct sockaddr *) &localAddr, sizeof(localAddr)); if (rc < 0) { printf("cannot bind port TCP %u\n", port); perror("error "); return (1); } /* connect to server */#if !defined _WIN32 alarm(t_flag);#endif rc = connect(sd, (struct sockaddr *) &servAddr, sizeof(servAddr));#if !defined _WIN32 alarm(0);#endif if (rc < 0) { perror("cannot connect"); return (1); } /* send data */ rc = send(sd, msg, sizeof(char) * strlen(msg), 0); if (rc < 0) { perror("cannot send data "); close(sd); return (1); } /* get response */ memset(buf, 0, sizeof(buf)); switch (flag) { /* print only the first line (HTTP status line..) */ case PRINT_SOME:#if !defined _WIN32 alarm(t_flag);#endif rc = recv(sd, buf, sizeof(buf), 0);#if !defined _WIN32 alarm(0);#endif if (rc < 0) { perror("cannot recv data "); close(sd); return (1); } for (i = 0; buf[i] != '\n'; i++) ; buf[i-1] = '\0'; printf("%s\n", buf); break; case PRINT_ALL:#if !defined _WIN32 alarm(t_flag);#endif while ((rc = recv(sd, buf, sizeof(buf), 0)) != 0) { if (rc < 0) { perror("cannot recv data "); close(sd); return (1); } printf("%s", buf); memset(buf, 0, sizeof(buf)); }#if !defined _WIN32 alarm(0);#endif break; case PRINT_NOTHING: break; } close(sd); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -