精华区 [关闭][返回]

当前位置:网易精华区>>讨论区精华>>编程开发>>C/C++>>网络与通讯>>LINUX下写一个小小的socket client

主题:LINUX下写一个小小的socket client
发信人: tsingxiao()
整理人: girlrong(1999-11-13 15:15:16), 站内信件
第二块砖头  :-)


/* t_cnt's LINUX editon, author: TsingXiao, 1999.07.12 */

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <netdb.h>

#include <sys/types.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <sys/time.h>

#include <netinet/in.h>

#define DEF_IP "127.0.0.1" /* default IP */
#define DEF_PORT    5556     /* default port */
#define BUF_LEN     255      /* s_buf's length */
#define STDIN 0 /* standard input */

int ret_no;         /* return number */
int port;           /* Remote port */
struct hostent* he; /* remote host infos' */

void print_usage();

void print_usage()
{
printf("Usage: cnt [IP address] [port-number]\n");
printf("This small stuff is ONLY a toy! Can execute foreign commands.
\n");
printf("You can specify IP and port to connect on.\n");
printf("author: [email protected], 1999\n");
}

main(int argc, char* argv[])
{
int sockfd;                     /* local socket */
int i;
char s_buf[BUF_LEN];
char cmd_line[BUF_LEN];
struct sockaddr_in addr_in;     /* remote addr_in */
he = NULL;
port = -1;
print_usage();
if (argc == 1) {
port = DEF_PORT;                /* default port */
he = gethostbyname(DEF_IP);
}
if (argc == 2) {
he = gethostbyname(argv[1]);
}
if (argc == 3) {
he = gethostbyname(argv[1]);
port = atoi(argv[2]);
}
if (he == NULL) {
printf("gethostbyname error, code: %d\nAbort!\n", errno);
exit(-1);
}
if ((port <= 0) || (port > 99999)) {
port = DEF_PORT;
}
printf("IP:   %s\n", inet_ntoa(*((struct in_addr *)he->h_addr)));
printf("Port: %d\n", port);
sockfd = socket(AF_INET, SOCK_STREAM, 0);   /* do some error checking
! */
if (sockfd < 0) {
printf("socket error, code: %d\nAbort!\n", errno);
exit(-1);
}
addr_in.sin_family = AF_INET; /* host byte order */
addr_in.sin_port = htons(port); /* short, network byte or
der */
addr_in.sin_addr = *((struct in_addr *)he -> h_addr);
bzero(&(addr_in.sin_zero), 8);              /* zero the rest of the s
truct */

ret_no = connect(sockfd, (struct sockaddr *)&addr_in, sizeof(struct s
ockaddr));
if (ret_no < 0) {
printf("connect error, code: %d\nAbort!\n", errno);
exit(-1);
}
printf("Enter Cmd: ");
while (1) {
fd_set readfds;
bzero(s_buf, BUF_LEN);
bzero(cmd_line, BUF_LEN);
FD_ZERO(&readfds);
FD_SET(sockfd, &readfds);
FD_SET(STDIN, &readfds);
select(sockfd + 1, &readfds, NULL, NULL, NULL);

if (FD_ISSET(sockfd, &readfds)) { /* receive from remote */
ret_no = recv(sockfd, s_buf, BUF_LEN, 0);
if (ret_no < 0) {
printf("recv error, code: %d\nAbort!\n", errno);
exit(-1);
}
printf("\n-*-*-*-*-*-*-\nReceived: %s\n-*-*-*-*-*-*-\n", s_buf);
}

if (FD_ISSET(STDIN, &readfds)) { /* receive from terminal */
read(STDIN, cmd_line, BUF_LEN);
if (cmd_line[0] == 10) {
continue;
}
cmd_line[strlen(cmd_line) - 1] = 0;
ret_no = send(sockfd, cmd_line, strlen(cmd_line), 0);
if (ret_no < 0) {
printf("send error, code: %d\nContinue!\n", errno);
continue;
}
}
}
close(sockfd);
}


--

既不能达而兼善天下
只好穷而独善自身
青山处处 斯民如土矣……

※ 来源:.月光软件站 http://www.moon-soft.com.[FROM: 202.96.243.173]

[关闭][返回]