简单客户端编写

本例要用到系统自带的ssh(安全外壳协议)服务器,所以使用之前要先安装和开启ssh服务器。

1.linux开启ssh

  1. 首先更新源  
    sudo apt-get update
  2. 安装ssh服务
    sudo apt-get install openssh-server
  3. 检测是否已启动
    ps -e | grep ssh

    看到有ssh字样,说明已启动,如果没有就手动启动

    /etc/init.d/ssh start
  4. 配置ssh-server,配置文件位于/etc/ssh/sshd_config,默认端口为22,为了安全,一般自定义为其他端口,然后重启
    sudo /etc/init.d/ssh resart

    在windows中,使用putty或者SSH Secure Shell等登录虚拟机

2.测试代码
#include <stdio.h>  
#include <stdlib.h>  
#include <errno.h>  
#include <string.h>  
#include <sys/types.h>  
#include <netinet/in.h>  
#include <sys/socket.h>  
#include <sys/wait.h>  
#include <unistd.h>  
#include <arpa/inet.h>  
#include <fcntl.h>  
#include <sys/epoll.h>  
#include <sys/time.h>  
#include <sys/resource.h> 


#define MAXBUFF 1024


/******************************************************************** 
 *函数功能:根据指数补偿算法重新尝试连接 
 *参考:APUE 
 *返回值:成功返回套接字描述符,失败返回-1 
 *******************************************************************/  
int connectRetry(int domain,int type,int protocol,const struct sockaddr *addr,socklen_t alen,int MAXSLEEP)  
{  
  int numsec,fd;  
  for(numsec=1;numsec<=MAXSLEEP;numsec<<=1)  
    {  
      if((fd=socket(domain,type,protocol))<0)  
	return -1;  
      if(connect(fd,addr,alen)==0)  
	return fd;  
      close(fd);  
      if(numsec<=MAXSLEEP/2)  
	sleep(numsec);  
    }  
  return -1;  
}  






int main(int argc,char **argv)
{
  struct sockaddr_in dest;
  int sockfd;
  char buff[MAXBUFF];

  /* 初始化服务器端(对方)的地址和端口信息 */  
  bzero(&dest, sizeof(dest));  
  dest.sin_family = AF_INET;  
  dest.sin_port = htons(atoi(argv[2]));  
  if (inet_aton(argv[1], (struct in_addr *) &dest.sin_addr.s_addr) == 0) {  
    perror(argv[1]);  
    exit(errno);  
  }  
  if((sockfd=connectRetry(AF_INET,SOCK_STREAM,0,(struct sockaddr *)&dest,sizeof(dest),128))==-1)  
    {  
      perror("connect retry");  
      exit(1);  
    }  

  /*初始化缓冲区*/
  bzero(buff,MAXBUFF);
  recv(sockfd, buff, sizeof(buff), 0);
  printf("%s", buff);

  /* 关闭连接 */
  close(sockfd);
  return 0;
}

3.运行
./client 127.0.0.1 22
相关文章
相关标签/搜索