| CPU |
Apr 26th, 2008 2:13 PM |
Re: reverse connection
Finally i solve.
server sourcecodes:
:
#include <stdio.h> #include <stdlib.h> #include <winsock.h> #include <string.h> #define MAXPENDING 5 #define BUFFER_SIZE 1024 #define EXIT_CALL "exit" int main() { int local_socket = 0, remote_socket = 0, message_length = 0, remote_length = 0; unsigned short local_port = 0, remote_port = 0; struct sockaddr_in local_address, remote_address; WSADATA wsa_data; char message[BUFFER_SIZE], remote_ip[32]; printf("Enter local port to use: "); scanf("%d", &local_port); fflush(stdin); if(WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0){ fprintf(stderr, "WSAStartup() failed.\n"); return (1); } if((local_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ fprintf(stderr, "socket() failed.\n"); return(1); } memset(&local_address, 0, sizeof(local_address)); local_address.sin_family = AF_INET; local_address.sin_addr.s_addr = htonl(INADDR_ANY); local_address.sin_port = htons(local_port); if(bind(local_socket, (struct sockaddr *) &local_address, sizeof(local_address)) < 0){ fprintf(stderr, "bind() failed.\n"); return(1); } printf("Enter client IP: "); scanf("%s", remote_ip); fflush(stdin); printf("Enter client Port: "); scanf("%d", &remote_port); fflush(stdin); if((remote_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ fprintf(stderr, "socket() failed.\n"); return(1); } memset(&remote_address, 0, sizeof(remote_address)); remote_address.sin_family = AF_INET; remote_address.sin_addr.s_addr = inet_addr(remote_ip); remote_address.sin_port = htons(remote_port); if(connect(remote_socket, (struct sockaddr *) &remote_address, sizeof(remote_address)) < 0){ fprintf(stderr, "connect() failed.\n"); return(1); } if(listen(local_socket, MAXPENDING) < 0){ fprintf(stderr, "listen() failed\n"); return(1); } do{ memset(&message, 0, BUFFER_SIZE); if((message_length = recv(remote_socket, message, BUFFER_SIZE, 0)) < 0) { fprintf(stderr, "recv() failed.\n"); return(1); } printf("From client %s: %s\n", inet_ntoa(remote_address.sin_addr), message); }while(strcmp(message, EXIT_CALL)); WSACleanup(); closesocket(local_socket); closesocket(remote_socket); return(0); }
client source code:
:
#include <stdio.h> #include <stdlib.h> #include <winsock.h> #include <string.h> #define MAXPENDING 5 #define BUFFER_SIZE 1024 #define EXIT_CALL "exit" int main() { int local_socket = 0, remote_socket = 0, message_length = 0, remote_length = 0; unsigned short local_port = 0, remote_port = 0; struct sockaddr_in local_address, remote_address; WSADATA wsa_data; char message[BUFFER_SIZE]; printf("Enter local port to use: "); scanf("%d", &local_port); fflush(stdin); if(WSAStartup(MAKEWORD(2, 0), &wsa_data) != 0){ fprintf(stderr, "WSAStartup() failed.\n"); return (1); } if((local_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ fprintf(stderr, "socket() failed.\n"); return(1); } memset(&local_address, 0, sizeof(local_address)); local_address.sin_family = AF_INET; local_address.sin_addr.s_addr = htonl(INADDR_ANY); local_address.sin_port = htons(local_port); if(bind(local_socket, (struct sockaddr *) &local_address, sizeof(local_address)) < 0){ fprintf(stderr, "bind() failed.\n"); return(1); } if(listen(local_socket, MAXPENDING) < 0){ fprintf(stderr, "listen() failed\n"); return(1); } remote_length = sizeof(remote_address); for(;;){ if((remote_socket = accept(local_socket, (struct sockaddr *) &remote_address, &remote_length) ) < 0){ fprintf(stderr, "accept() failed.\n"); return(1); } else{ break; } } do{ memset(&message, 0, BUFFER_SIZE); printf("Enter message to send: "); gets(message); fflush(stdin); message_length = (strlen(message)); if (send(remote_socket, message, message_length, 0) != message_length){ fprintf(stderr, "send() failed.\n"); return(1); } }while(strcmp(message, EXIT_CALL)); WSACleanup(); closesocket(local_socket); closesocket(remote_socket); return(0); }
|