无法连接到localhost

时间:2014-09-12 18:21:43

标签: c linux unix ip localhost

我正在运行linux mint并且已经在命令终端输入了一些连接到我的localhost的命令,但它一直说连接失败了。

以下是我输入的内容:

echo "echo test" | ./<my executable> localhost <port #>

以下是我的连接代码:

  int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen);
  if (r < 0) {
    printf("Connection failed\n");
    exit(1);
  }

以下是完整代码:

int main(int argc, char *argv[]) {
  if (argc != 3) {
    printf("Invalid arguments\n");
    exit(1);
  }

  char *serverIP = argv[1]; /*Server hostname*/
  char *portNumber = argv[2]; /*Port Number*/
  void *numericAddress;
  char addrBuffer[INET6_ADDRSTRLEN];
  in_port_t port;
  char buffer_stdin[65535];
  char buffer_stdout[65535];
  int bytes_read = 0;
  int bytes_written = 0;

  /*getting integral number of string representation of port number*/
  in_port_t servPort = atoi(argv[2]);

  /*------------------get binary number of hostname-----------------*/
  struct addrinfo addrCriteria;
  memset(&addrCriteria, 0, sizeof(addrCriteria));
  addrCriteria.ai_family = AF_INET;
  addrCriteria.ai_socktype = SOCK_STREAM;
  addrCriteria.ai_protocol = IPPROTO_TCP;

  struct addrinfo *addrList;

  int rtnVal = getaddrinfo(serverIP, portNumber, &addrCriteria, &addrList);
  if (rtnVal != 0) {
    printf("getaddrinfo() failed\n");
    exit(1);
  }

  numericAddress = &((struct sockaddr_in *) (addrList->ai_addr))->sin_addr;
  /*Converting port to binary*/
  ((struct sockaddr_in *)(addrList->ai_addr))->sin_port = htons(servPort);
  /*----------------------------------------------------------------*/

  inet_ntop(addrList->ai_addr->sa_family, numericAddress, addrBuffer, sizeof(addrBuffer));
  printf("IP ADDRESS: %s\n", addrBuffer);

  /*Creating socket*/
  int sock = socket(AF_INET,SOCK_STREAM, IPPROTO_TCP);
  if (sock < 0) {
    printf("error creating socket\n");
    exit(1);
  }

  /*Establish connection to the echo server*/
  int r = connect(sock, addrList->ai_addr, addrList->ai_addrlen);
  if (r < 0) {
    perror("Connection failed\n");
    exit(1);
  }

  /*Reading from stdin and writing to socket until stdin ends
  bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin));
  write(sock, buffer_stdin, bytes_read);*/

  while ((bytes_read = read(0, buffer_stdin, sizeof(buffer_stdin)-1)) > 0) {
    write(sock, buffer_stdin, bytes_read);
  }

  /*Shutting down write end of socket*/
  int r_shutdown = shutdown(sock, SHUT_WR);
  if (r_shutdown < 0) {
    printf("Shutting down write end of socket failed\n");
    exit(1);
  }

  /*Reading from socket and writing to stdout until socket ends*/
  while ((bytes_read = read(sock, buffer_stdout, sizeof(buffer_stdout)-1)) > 0) {
    write(1, buffer_stdout, bytes_read);
  }

  close(sock);
  exit(0);
}

我是否需要安装一些东西才能连接到localhost?

由于

编辑:好的,这是一个更新:

首先我输入命令终端:chmod a + x exe(其中exe是我们的UDP服务器) 然后我输入:./ exe例如./exe 2525 然后我输入:echo“echo test”| ./ localhost

但是当发生这种情况时,终端不会返回“回声测试”,它就像是在等待来自用户的输入,或者就像它被卡在无限循环中一样。

1 个答案:

答案 0 :(得分:0)

看起来您需要在命令行上提供localhost:

./exe localhost 2525

或:

echo test | ./exe localhost 2525