I added a printf to see if I was getting from the socket. It just came across with a bunch of @@@@@ which leds me to believe that i'm not reading from the socket right.
I'm using visual c++. This is the code thats giving me the trouble.
this is the socket functions.Code:void check_autoroller(void) { /* this autoroller is for DM only! */ int stat; char from[500]; int str, in, wis, dex, con; int AUTOROLLING = TRUE; printf("Max str?\n\r"); scanf("%d",&str); printf("Max int?\n\r"); scanf("%d",&in); printf("Max wis?\n\r"); scanf("%d",&wis); printf("Max dex?\n\r"); scanf("%d",&dex); printf("Max con?\n\r"); scanf("%d",&con); read_from_socket(from, 1038); printf("%s",from); while (AUTOROLLING != FALSE) { if (from[0] != 'S') return; // str stat = (from[10]-48) * 10 + from[11]-48; if (stat < str){ write_to_socket("no\n"); return; } // int stat = (from[27]-48) * 10 + from[28]-48; if (stat < in){ write_to_socket("no\n"); return; } // wis stat = (from[38]-48) * 10 + from[39]-48; if (stat < wis){ write_to_socket("no\n"); return; } // dex stat = (from[52]-48) * 10 + from[53]-48; if (stat < dex){ write_to_socket("no\n"); return; } // con stat = (from[69]-48) * 10 + from[70]-48; if (stat < con){ write_to_socket("no\n"); return; } write_to_socket("yes\n"); AUTOROLLING = FALSE; return; } } int main(void) { char host[50]; int port; printf("Enter the host to connect to.\n\r"); gets(host); port = 2222; init_winsock(); connect_to_host(host,port); do_specs(); send_spec(); printf("specs sent. Initiating autorolling.\n\r"); check_autoroller(); close_connection(); shutdown_winsock(); return 0; }
Code:void close_connection(void) { closesocket(sock); } int init_winsock(void) { WORD wVersionRequested = MAKEWORD(2,0); WSADATA wsaData; WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) { wVersionRequested = MAKEWORD(1,1); WSACleanup(); WSAStartup(wVersionRequested, &wsaData); if (wsaData.wVersion != wVersionRequested) return false; } return true; } int connect_to_host(char *hostname, int port) { LPHOSTENT lpHostEntry; SOCKADDR_IN saServer; int arg; unsigned long arg2; // Perform DNS lookup lpHostEntry = gethostbyname(hostname); if (lpHostEntry == NULL) { return DNS_FAILURE; } // Create the socket sock = socket(PF_INET,SOCK_STREAM,IPPROTO_TCP); // set the recv buf to 4k arg = 4096; setsockopt(sock,SOL_SOCKET,SO_RCVBUF,(char *) &arg,sizeof(arg)); // set the send buf to 1k arg = 1024; setsockopt(sock, SOL_SOCKET,SO_SNDBUF, (char *) &arg, sizeof(arg)); if (sock == INVALID_SOCKET) { return SOCKET_FAILURE; } // Connect to host saServer.sin_family = PF_INET; saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list); saServer.sin_port = htons(port); if ( connect(sock, (LPSOCKADDR)&saServer, sizeof(struct sockaddr)) == SOCKET_ERROR) { closesocket(sock); return CONNECT_FAILURE; } // Turn off blocking mode ioctlsocket(sock,FIONBIO,&arg2); return true; } int read_from_socket(char * buf, int bufsize) { int cnt; // unsigned long arg; // if (ioctlsocket(sock, FIONREAD, &arg) == SOCKET_ERROR) // return -1; // if (arg <= 0) return false; cnt = recv(sock,buf, bufsize,0); if (cnt == SOCKET_ERROR || cnt == 0) { int error; error = WSAGetLastError(); // Might should check for other error codes too, but these seem most likely // to indicate lost connection if (error == WSAENETRESET || error == WSAECONNABORTED || error == WSAECONNRESET || error == WSAEINVAL || cnt == 0) return -1; return false; } buf[cnt] = '\0'; return true; } void write_to_socket(char * buf) { send(sock, buf, strlen(buf),0); return; } void shutdown_winsock(void) { // cleanup winsock closesocket(sock); WSACleanup(); return; }



LinkBack URL
About LinkBacks


