Jump to content
Xtreme .Net Talk

Recommended Posts

Posted

Hi, I'm learning network programming from Beej tutorial.

I changed his server examole to work under Windows. Here's the code:

#include <winsock.h>
   #include <stdio.h>
   #define MYPORT 3490    
   #define BACKLOG 10     

   int main(void)
   {
       WSADATA wsaData;
       SOCKET sockfd, new_fd;  
       struct sockaddr_in my_addr;    
       struct sockaddr_in their_addr;
       int sin_size;

       int yes=1;

       if (WSAStartup(MAKEWORD(1, 1), &wsaData) != 0) {
           fprintf(stderr, "WSAStartup failed.\n");
           exit(1);
       } 

       if ((sockfd = socket(AF_INET, SOCK_STREAM, 0)) == -1) {
           perror("socket");
           exit(1);
       }
       if (setsockopt(sockfd,SOL_SOCKET,SO_REUSEADDR,(const char*)&yes,sizeof(yes)) == -1) {
           perror("setsockopt");
           exit(1);
       }
       
       my_addr.sin_family = AF_INET;         
       my_addr.sin_port = htons(MYPORT);     
       my_addr.sin_addr.s_addr = INADDR_ANY; 
       memset(&(my_addr.sin_zero), '\0', 8); 
       if (bind(sockfd, (struct sockaddr *)&my_addr, sizeof(struct sockaddr))
                                                                      == -1) {
           perror("bind");
           exit(1);
       }
       if (listen(sockfd, BACKLOG) == -1) {
           perror("listen");
           exit(1);
       }

       while(1) {  
           sin_size = sizeof(struct sockaddr_in);
           if ((new_fd = accept(sockfd, (struct sockaddr *)&their_addr,
                                                          &sin_size)) == -1) {
               perror("accept");
               continue;
           }
           printf("server: got connection from %s\n",
                                              inet_ntoa(their_addr.sin_addr));
           closesocket(sockfd); 
           if (send(new_fd, "Hello, world!\n", 14, 0) == -1)
               perror("send");
           closesocket(new_fd); 
       }
       return 0;
   }

 

When I execute this code and in Start\Run type:

telnet hostname 3490 I get message Hello world and after that Connection to host lost. At the same time in first window (server) I see infinte loop with text: "accept: No error", I assume it is perror("accept"). Now, when I try once more to start telnet I get message:

Could not open connection to the host, on port 3490. No connection could be made because the target machine actively refused it.

I don't think this program is supposed to do this. If someone can explain me why it is happenning and how to fix it.

Thanks

  • 4 weeks later...
Posted
Whever I've seen the message "No connection could be made because the target machine actively refused it." - which is Winsock error 10061, it means that you can see the machine, but there's nothing listening on that port. Either that or the program did actually listen on that port, and it was not accepted, as you might do with a Socket.Accept()
  • Administrators
Posted

Looks like the server is accepting the connection, sending the "Hello World" message and then closing the socket down - hence the client disconnecting. Since the socket has been closed it will refuse further requests.

You might want to step through the code on the server and see what exactly happens when an inbound connection is accepted.

Posting Guidelines FAQ Post Formatting

 

Intellectuals solve problems; geniuses prevent them.

-- Albert Einstein

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...