⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sktsrvr.cpp

📁 伯克利做的SFTP安全文件传输协议
💻 CPP
字号:
// sktsrvr.cpp// listen to a socket, and then forward data between it and the tty#include <iostream.h>      // cout#include <stdio.h>         // printf#include <stdlib.h>        // atoi#include <syslog.h>        // syslog#include "sockutil.h"      // socket funcs#include "datablok.h"      // DataBlock#include "str.h"           // stringb#define STDIN 0#define STDOUT 1int doit(int argc, char *argv[]){  // positional arguments  int listenPort;  if (argc < 2) {    printf("usage: %s listen-port\n"           "  once an incoming connection happens, socket data is send to\n"           "  and received from the terminal\n", argv[0]);    return 0;  }  listenPort = atoi(argv[1]);  // wait for an incoming connection  fprintf(stderr, "waiting for connection on port %d\n", listenPort);  SOCKET listener = listen_socket(listenPort);  SOCKET socket = accept_socket(listener);  close_socket(listener);  fprintf(stderr, "connection received: %s\n", sockInfo(socket).pcharc());  // create a forwarding buffer  DataBlock buffer(1024);  buffer.setDataLen(1024);  // enter forwarding loop  for(;;) {    SocketSet sockset;    sockset.add(socket);    sockset.add(STDIN);    sockset.blockUntilReadable();    if (sockset.contains(socket)) {      // socket -> STDOUT      int len = recv(socket, buffer.getData(), buffer.getDataLen(), 0);      if (len < 0) {        perror("recv");        exit(2);      }      else if (len == 0) {        fprintf(stderr, "connection closed\n");        break;      }      len = write(STDOUT, buffer.getData(), len);      if (len < 0) {        perror("write");        exit(2);      }    }    else if (sockset.contains(STDIN)) {      // STDIN -> socket      int len = read(STDIN, buffer.getData(), buffer.getDataLen());      if (len < 0) {        perror("read");        exit(2);      }      else if (len == 0) {        fprintf(stderr, "user typed EOF\n");        break;      }      len = send(socket, buffer.getData(), len, 0);      if (len < 0) {        perror("send");        exit(2);      }    }    else {      fprintf(stderr, "select() screwed up!\n");    }  }  close_socket(socket);  return 0;}int main(int argc, char *argv[]){  xBase::logExceptions = false;       // generally I'm handling them myself  socket_lib_init();  try {    return doit(argc, argv);  }  catch (xBase &x) {    fprintf(stderr, "unhandled exception: %s\n", x.why());    return 4;  }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -