C++;IPv6端口问题 OK,所以我正在尝试用C++来为IPv6运行一个欢迎套接字。 问题是每次我启动程序时,它侦听的端口似乎都会改变 #include <iostream> #include <stdlib.h> #include <string> #include <string.h> #include <arpa/inet.h> int main(int argc, char *argv[]){ //Setting up the serverAddr: struct sockaddr_in6 serverAddr; memset((char *)&serverAddr, 0, sizeof(sockaddr_in6)); serverAddr.sin6_family = AF_INET6; // IP6 is best current practise. serverAddr.sin6_addr = in6addr_any; // Don't care for interfaces. serverAddr.sin6_port = htons(7979); // FIXME change port later. //Opening the welcomeSocket: std::cout << "Opening socket:\t"; int welcomeSocket = socket(AF_INET6, SOCK_STREAM, 0); if(welcomeSocket < 0){ std::cout << "[FAIL]" << std::endl; return 1; }else{ std::cout << "[ OK ]" << std::endl; } //Listening for clients: while(welcomeSocket >= 0){ std::cout << "Listening for connections…" << std::endl; listen(welcomeSocket, 1); struct sockaddr_in6 clientAddr; memset((char *)&clientAddr, 0, sizeof(sockaddr_in6)); int clientAddrLength = sizeof(clientAddr); int clientSocket = accept(welcomeSocket, (struct sockaddr*) &clientAddr, (socklen_t*) &clientAddrLength); char caddr[INET6_ADDRSTRLEN]; //caddr is not lisp here. inet_ntop(AF_INET6, &clientAddr, caddr, INET6_ADDRSTRLEN); std::cout << "Request from '" << caddr << "'" << std::endl; shutdown(clientSocket, SHUT_RDWR); clientSocket = -1; shutdown(welcomeSocket, SHUT_RDWR); welcomeSocket = -1; } return 0; }

C++;IPv6端口问题 OK,所以我正在尝试用C++来为IPv6运行一个欢迎套接字。 问题是每次我启动程序时,它侦听的端口似乎都会改变 #include <iostream> #include <stdlib.h> #include <string> #include <string.h> #include <arpa/inet.h> int main(int argc, char *argv[]){ //Setting up the serverAddr: struct sockaddr_in6 serverAddr; memset((char *)&serverAddr, 0, sizeof(sockaddr_in6)); serverAddr.sin6_family = AF_INET6; // IP6 is best current practise. serverAddr.sin6_addr = in6addr_any; // Don't care for interfaces. serverAddr.sin6_port = htons(7979); // FIXME change port later. //Opening the welcomeSocket: std::cout << "Opening socket:\t"; int welcomeSocket = socket(AF_INET6, SOCK_STREAM, 0); if(welcomeSocket < 0){ std::cout << "[FAIL]" << std::endl; return 1; }else{ std::cout << "[ OK ]" << std::endl; } //Listening for clients: while(welcomeSocket >= 0){ std::cout << "Listening for connections…" << std::endl; listen(welcomeSocket, 1); struct sockaddr_in6 clientAddr; memset((char *)&clientAddr, 0, sizeof(sockaddr_in6)); int clientAddrLength = sizeof(clientAddr); int clientSocket = accept(welcomeSocket, (struct sockaddr*) &clientAddr, (socklen_t*) &clientAddrLength); char caddr[INET6_ADDRSTRLEN]; //caddr is not lisp here. inet_ntop(AF_INET6, &clientAddr, caddr, INET6_ADDRSTRLEN); std::cout << "Request from '" << caddr << "'" << std::endl; shutdown(clientSocket, SHUT_RDWR); clientSocket = -1; shutdown(welcomeSocket, SHUT_RDWR); welcomeSocket = -1; } return 0; },c++,networking,port,ipv6,C++,Networking,Port,Ipv6,要测试我运行nmap的代码,请执行以下操作: $ nmap -6 -p 1-65535 ::1 Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-09 16:43 CEST Nmap scan report for ip6-localhost (::1) Host is up (0.00023s latency). Not shown: 65532 closed ports PORT STATE SERVICE 22/tcp o

要测试我运行nmap的代码,请执行以下操作:

$ nmap -6 -p 1-65535 ::1

Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-09 16:43 CEST
Nmap scan report for ip6-localhost (::1)
Host is up (0.00023s latency).
Not shown: 65532 closed ports
PORT      STATE SERVICE
22/tcp    open  ssh
631/tcp   open  ipp
56160/tcp open  unknown

Nmap done: 1 IP address (1 host up) scanned in 1.41 seconds

我想我忽略了一些简单的事情。

是的,我想你也是。在您可以使用套接字进行任何操作之前,您还需要拨打一些其他电话。如果你想成为一个服务器,你必须调用
bind()
来设置本地地址,调用
listen()
来通知操作系统这是一个服务器。然后你可以使用accept。有时候有点痛

  • 来自Beej.us的关于Linux/Unix/Winsock编程的精彩文章。它提供了很好的示例,并以完全分类的PDF格式提供
    是的,我想你也是。在您可以使用套接字进行任何操作之前,您还需要拨打一些其他电话。如果你想成为一个服务器,你必须调用
    bind()
    来设置本地地址,调用
    listen()
    来通知操作系统这是一个服务器。然后你可以使用accept。有时候有点痛

    • 来自Beej.us的关于Linux/Unix/Winsock编程的精彩文章。它提供了很好的示例,并以完全分类的PDF格式提供
    该死……我忘了绑定o.o.m(-我会检查一下,我想我可以接受你的答案。谢谢你帮我:)@JakobRunge:当然。只需记住
    listen()@雅克布伦格:你不必每次都做
    。在while循环之前执行一次<代码>接受
    是while循环中唯一需要的东西。该死……我忘了绑定o.o‽m(-我会检查一下,我想我可以接受你的答案。谢谢你的帮助:)@JakobRunge:当然。只需记住
    listen()@雅克布伦格:你不必每次都做
    。在while循环之前执行一次<代码>接受
    是while循环中唯一需要的内容。
    $ nmap -6 -p 1-65535 ::1
    
    Starting Nmap 5.21 ( http://nmap.org ) at 2012-06-09 16:43 CEST
    Nmap scan report for ip6-localhost (::1)
    Host is up (0.00023s latency).
    Not shown: 65532 closed ports
    PORT      STATE SERVICE
    22/tcp    open  ssh
    631/tcp   open  ipp
    56160/tcp open  unknown
    
    Nmap done: 1 IP address (1 host up) scanned in 1.41 seconds