57 lines
1.3 KiB
C++
57 lines
1.3 KiB
C++
#include <arpa/inet.h>
|
|
#include <netinet/in.h>
|
|
#include <sys/socket.h>
|
|
#include <unistd.h>
|
|
|
|
#include <cstring>
|
|
#include <iostream>
|
|
|
|
int main(int argc, char **argv) {
|
|
if (argc < 3) {
|
|
std::cout << "Usage: " << argv[0] << " <host> <port>\n";
|
|
return 1;
|
|
}
|
|
const char *host = argv[1];
|
|
int port = std::atoi(argv[2]);
|
|
|
|
int sock = socket(AF_INET, SOCK_STREAM, 0);
|
|
if (sock < 0) {
|
|
perror("socket");
|
|
return 1;
|
|
}
|
|
struct sockaddr_in addr;
|
|
std::memset(&addr, 0, sizeof(addr));
|
|
addr.sin_family = AF_INET;
|
|
addr.sin_port = htons(port);
|
|
if (inet_pton(AF_INET, host, &addr.sin_addr) <= 0) {
|
|
perror("inet_pton");
|
|
close(sock);
|
|
return 1;
|
|
}
|
|
|
|
if (connect(sock, (struct sockaddr *)&addr, sizeof(addr)) < 0) {
|
|
perror("connect");
|
|
close(sock);
|
|
return 1;
|
|
}
|
|
std::cout << "Connected to " << host << ":" << port << std::endl;
|
|
|
|
char buf[1024];
|
|
while (true) {
|
|
ssize_t n = recv(sock, buf, sizeof(buf)-1, 0);
|
|
if (n > 0) {
|
|
buf[n] = '\0';
|
|
std::cout << buf;
|
|
std::cout.flush();
|
|
} else if (n == 0) {
|
|
std::cout << "Server closed connection\n";
|
|
break;
|
|
} else {
|
|
perror("recv");
|
|
break;
|
|
}
|
|
}
|
|
close(sock);
|
|
return 0;
|
|
}
|