哪位有linux telnet客户端 C 的例程?
在网上找了一下,有服务器端的telnet例程,但找不到客户端的。 putty busybox源码中有一个telnet的实现 非常简单 很容易移植 找到资料了,用了三个函数connect();send();recv();
其中connect();send()两个函数运行成功;
recv()失败
大致写法如下
connect主机+端口号
send 发了2个字符(send的返回值为2)
200ms之后
recv (返回-1,表示失败)
问题:是否在使用recv()之前,要使用listen或accept函数呢? 这个是我以前port的busybox的telnet ucos+uctcpip的arm7平台
主流程你可以参考下
int telnet_main(int argc , char **argv)
{
extern NET_IP_ADDR ip; // local ip
struct in_addr remote_ip = { htonl(ip) };
in_port_t remote_port = htons(23);
struct sockaddr_in remot_socket;
structfd_set readfds;
int maxfd;
structtimeval net_rd_ov = {0,50*1000}; //50ms
int len;
int ch;
if(argc >= 1)
{
in_addr_t tmp_ip = inet_addr(argv);
if(tmp_ip != 0xFFFFFFFF && tmp_ip != 0)
remote_ip.s_addr = tmp_ip;
}
if(argc >=2 )
{
int p = atoi(argv);
if(p>0 && p<0xffff)
remote_port = htons(p);
}
INIT_G();
printf(">> Remot %s : %d\n", inet_ntoa(remote_ip) , ntohs(remote_port));
// creat a socket
memset(&remot_socket, 0, sizeof(struct sockaddr_in)); // clear our address
remot_socket.sin_family = AF_INET;
remot_socket.sin_addr = remote_ip; // host address
remot_socket.sin_port = remote_port;// port number
if ((netfd = socket(AF_INET, SOCK_STREAM, 0)) < 0) // create socket
{
TRACE_ERROR("create socket fail\n");
return(-1);
}
if(connect(netfd, (struct sockaddr *)&remot_socket, sizeof(struct sockaddr)) < 0)
{
TRACE_ERROR("connect fail\n");
doexit(-2);
}
FD_ZERO(&readfds);
FD_SET(netfd, &readfds);
maxfd = netfd + 1;
while (1)
{
struct fd_set rfds = readfds;
switch (select(maxfd, &rfds, NULL, NULL, &net_rd_ov))
{
case 0:
/* timeout */
break;
case -1:
TRACE_INFO("Connection error\n");
sleep(1);
break;
default:
if (FD_ISSET(netfd, &rfds))
{
len = recv(netfd, G.buf, DATABUFSIZE, MSG_DONTWAIT);
if (len <= 0)
{
TRACE_INFO("Connection closed by foreign host\n");
doexit(EXIT_FAILURE);
}
//TRACE_DEBUG("Read netfd (%d): %d\n", netfd, len);
handle_net_input(len);
}
break;
}
// key in handle
len = 0;
while( (ch = tty->getc(-1)) > 0 && len < DATABUFSIZE )
{
if((char)ch != 0x03)
G.key = (char)ch;
else
{
TRACE_INFO("BYE\n");
doexit(EXIT_SUCCESS);
}
}
if(len > 0)
{
//TRACE_DEBUG("Read console: %d\n", len);
handle_net_output(len);
}
} /* while (1) */
} mark 一下 telnet 编程
页:
[1]