Quantcast
Channel: Recent Questions - Stack Overflow
Viewing all articles
Browse latest Browse all 12111

winsock2 socket connection works within local pc, but not from remote pcs

$
0
0

I'm trying to learn low level networking in c, and have gotten as far as making TCP client and server programs that make, bind, connect, accept, etc. sockets using winsock.

They work just fine, and my simple chat console works as intended when both programs are running on the same machine, but connecting from a client on another pc over my local network, or another network, fails to open the socket connection.

Here are my server:

#include "sockets.h"int main(){    // SETUP AND BIND SERVER SOCKET    SOCKET server_socket = socket_setup();    SOCKADDR_IN address;    address.sin_family = AF_INET;    address.sin_addr.s_addr = inet_addr("192.168.xx.xxx"); //using public IP, not local (127.0.0.1)    address.sin_port = htons(6502);    if(bind(server_socket, (SOCKADDR*)&address, sizeof(address)) == SOCKET_ERROR)        WSA_ERR("Socket Bind Error");    if(listen(server_socket, 5) == SOCKET_ERROR)        WSA_ERR("Listening Error");    SOCKET accept_socket = SOCKET_ERROR;    do{        accept_socket = accept(server_socket, NULL, NULL);    }    while(accept_socket == SOCKET_ERROR);    // SEND AND RECEIVE BYTES    char sendmsg[100] = "Hello Client";    char recvmsg[100] = "";    int bytes_sent = send(accept_socket, sendmsg, strlen(sendmsg), 0);    if(bytes_sent == SOCKET_ERROR){        WSA_ERR("Send Error");    }else{        printf("Send OK\n");        printf("Bytes Sent: %ld\n", bytes_sent);        printf("%s\n", sendmsg);    }    int bytes_rcvd = blocking_recv(accept_socket, recvmsg);    if(bytes_rcvd == SOCKET_ERROR){        WSA_ERR("Recv Error");    }else{        printf("Recv OK\n");        printf("Bytes Rcvd: %ld\n", bytes_rcvd);        printf("%s\n", recvmsg);    }    chat_loop(recvmsg, sendmsg, accept_socket);    return 0;}

and client:

#include "sockets.h"int main(){    // SETUP AND CONNECT CLIENT SOCKET    SOCKET client_socket = socket_setup();    SOCKADDR_IN address;    address.sin_family = AF_INET;    printf("Enter IP address:\n");    char ip[15];    gets_s(ip, 15);    address.sin_addr.s_addr = inet_addr(ip);    address.sin_port = htons(6502);    if(connect(client_socket, (SOCKADDR*)&address, sizeof(address)) == SOCKET_ERROR && WSAGetLastError() != WSAEWOULDBLOCK){        WSA_ERR("Connection Error");    }    // SEND AND RECIEVE BYTES    char sendmsg[100] = "Hello Server";    char recvmsg[100] = "";    int bytes_rcvd = blocking_recv(client_socket, recvmsg);    if(bytes_rcvd == SOCKET_ERROR){        WSA_ERR("Recv Error"); //<-- WSAGetLastError() from inside macro gives error 10057 here    }else{        printf("Recv OK\n");        printf("Bytes Rcvd: %ld\n", bytes_rcvd);        printf("%s\n", recvmsg);    }    int bytes_sent = send(client_socket, sendmsg, strlen(sendmsg), 0);    if(bytes_sent == SOCKET_ERROR){        WSA_ERR("Send Error");    }else{        printf("Send OK\n");        printf("Bytes Sent: %ld\n", bytes_sent);        printf("%s\n", sendmsg);    }    chat_loop(recvmsg, sendmsg, client_socket);    system("pause");    return 0;}

This function is part of "sockets.h":

int blocking_recv(SOCKET sock, char buf[]){    int result = 0;    do{        result = recv(sock, buf, 100, 0);    }while(result == SOCKET_ERROR && WSAGetLastError() == WSAEWOULDBLOCK);    return result;}

I can elaborate on excluded code and macros if needed, but I think the problem must be in here somewhere since everything works fine except for the actual connections.

I've already disabled all firewalls, forwarded port, etc.I'm using non-blocking sockets.


Viewing all articles
Browse latest Browse all 12111

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>