C/C++ Help
 
Forums: » Register « |  User CP |  Games |  Calendar |  Members |  FAQs |  Sitemap |  Support | 
 
User Name:
Password:
Remember me
 
Go Back   Dev Articles Community ForumsProgrammingC/C++ Help

Reply
Add This Thread To:
  Del.icio.us   Digg   Google   Spurl   Blink   Furl   Simpy   Y! MyWeb 
Thread Tools Search this Thread Display Modes
 
Unread Dev Articles Community Forums Sponsor:
  #1  
Old December 29th, 2005, 05:59 AM
jaro jaro is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Nov 2005
Posts: 35 jaro User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 1 Day 6 h 16 m 44 sec
Reputation Power: 4
Send a message via Yahoo to jaro
How to listens to two different ports at the same time

hi there,
i've got this code that listens for incomming message through port and display the message it recieves..
here's the code:
Code:
#include "stdio.h" 
#include "winsock.h" 
#define PORT 1200 
#define BACKLOG 4 
struct sockaddr_in server; 
struct sockaddr_in client;
int sockfd,sockfd2,n_bytes; 
char msg[5000]; 
void handle_error(void);
int main(){ 
WSADATA wsda; 
WSAStartup(0x0101,&wsda); 
	if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){ 
	handle_error();
	printf("Socket error..."); 
	return 0; 
	} 
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(PORT);
server.sin_family=AF_INET; 
	if(bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){ 
	handle_error();
	printf("Cannot bind..."); 
	return 0; 
	} 
	if(listen(sockfd,BACKLOG)){
	handle_error();
	printf("Error Listening..."); 
	return 0; 
	} 
	while (1){ 
	int size=sizeof(struct sockaddr_in); 
		if((sockfd2=accept(sockfd,(struct sockaddr*)&client,&size))==-1){ 
		handle_error();
		printf("Accept Error..."); 
		return 0; 
		} 
		if((n_bytes=recv(sockfd2,msg ,5000,0))==-1){ 
		handle_error();
		printf("Error Recv..."); 
		return 0; 
		} 
	msg[n_bytes]='\0'; 
	printf("Client's Message:%s",msg); 
	} 
WSACleanup(); 
closesocket(sockfd);
closesocket(sockfd2); 
return 0; 
} 


void handle_error(void)
{
  switch ( WSAGetLastError() )
  {
    case WSANOTINITIALISED :
      printf("Unable to initialise socket.\n");
    break;
    case WSAEAFNOSUPPORT :
      printf("The specified address family is not supported.\n");
    break;
    case WSAEADDRNOTAVAIL :
      printf("Specified address is not available from the local machine.\n");
    break;
    case WSAECONNREFUSED :
      printf("The attempt to connect was forcefully rejected.\n"); 
      break; 
    case WSAEDESTADDRREQ : 
      printf("address destination address is required.\n");
    break;
    case WSAEFAULT :
      printf("The namelen argument is incorrect.\n");
    break;
    case WSAEINVAL :
      printf("The socket is not already bound to an address.\n");
    break;
    case WSAEISCONN :
      printf("The socket is already connected.\n");
    break;
    case WSAEADDRINUSE :
      printf("The specified address is already in use.\n");
    break;
    case WSAEMFILE : 
      printf("No more file descriptors are available.\n");
    break;
    case WSAENOBUFS :
      printf("No buffer space available. The socket cannot be created.\n");
    break;
    case WSAEPROTONOSUPPORT :
      printf("The specified protocol is not supported.\n");
      break; 
    case WSAEPROTOTYPE :
      printf("The specified protocol is the wrong type for this socket.\n");
    break;
    case WSAENETUNREACH : 
      printf("The network can't be reached from this host at this time.\n");
    break; 
    case WSAENOTSOCK :
       printf("The descriptor is not a socket.\n");
    break;
    case WSAETIMEDOUT :
      printf("Attempt timed out without establishing a connection.\n");
    break;
    case WSAESOCKTNOSUPPORT :
       printf("Socket type is not supported in this address family.\n");
    break;
    case WSAENETDOWN :
      printf("Network subsystem failure.\n");
    break;
    case WSAHOST_NOT_FOUND :
      printf("Authoritative Answer Host not found.\n");
    break;
    case WSATRY_AGAIN :
      printf("Non-Authoritative Host not found or SERVERFAIL.\n");
     break;
    case WSANO_RECOVERY :
       printf("Non recoverable errors, FORMERR, REFUSED, NOTIMP.\n");
    break;
    case WSANO_DATA :
      printf("Valid name, no data record of requested type.\n");
    break;
      case WSAEINPROGRESS :
      printf("address blocking Windows Sockets operation is in progress.\n");
    break;
    case WSAEINTR :
      printf("The (blocking) call was canceled via WSACancelBlockingCall().\n");
    break;
    default :
      printf("Unknown error.\n");
     break;
  }

}


i've run/tested this and it works fine...
...now i want for the program to listens to two different ports and display the message it recieves through them (ports)...

so i've try to edit the code above to this ( not quite sure if it the right thing to do though ):

Code:
#include "stdio.h" 
#include "winsock.h" 
#define PORT 1200 
#define BACKLOG 4 
struct sockaddr_in server; 
struct sockaddr_in client;
int sockfd,sockfd2,n_bytes; 
char msg[5000]; 

struct sockaddr_in servertwo; 
struct sockaddr_in clienttwo;
int sock_one,secondn_bytes,sock_two; 
char workmsg[5000];
#define workPORT 7777 
#define workBACKLOG 4 
void handle_error(void);
int main(){ 
WSADATA wsda; 
WSAStartup(0x0101,&wsda); 
	if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){ 
	handle_error();
	printf("Socket error..."); 
	return 0; 
	} 
server.sin_addr.s_addr=INADDR_ANY;
server.sin_port=htons(PORT); 
server.sin_family=AF_INET; 
	if((sock_one=socket(AF_INET,SOCK_STREAM,0))==-1){ 
	handle_error();
	printf("Socket error..."); 
	return 0; 
	} 

servertwo.sin_addr.s_addr=INADDR_ANY; 
servertwo.sin_port=htons(workPORT); 
servertwo.sin_family=AF_INET; 
	if(bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){ 
	handle_error();
	printf("Cannot bind..."); 
	return 0; 
	} 
	if(listen(sockfd,BACKLOG)){ /*Listening */
	handle_error();
	printf("Error Listening..."); 
	return 0; 
	} 
	if(bind(sock_one,(struct sockaddr*)&servertwo,sizeof(struct sockaddr))==-1){ 
	handle_error();
	printf("Cannot bind..."); 
	return 0; 
	} 
	if(listen(sock_one,workBACKLOG)){
	handle_error();
	printf("Error Listening..."); 
	return 0; 
	} 
	while (1){ 
	int size=sizeof(struct sockaddr_in); 
	int size2=sizeof(struct sockaddr_in); 
		if((sockfd2=accept(sockfd,(struct sockaddr*)&client,&size))==-1){ 
		handle_error();
		printf("Accept Error..."); 
		return 0; 
		} 
		if((n_bytes=recv(sockfd2,msg ,5000,0))==-1){ 
		handle_error();
		printf("Error Recv..."); 
		return 0; 
		} 
		if((sock_two=accept(sock_one,(struct sockaddr*)&clienttwo,&size2))==-1){ 
		handle_error();
		printf("Accept Error..."); 
		return 0; 
		} 
		if((secondn_bytes=recv(sock_two,workmsg ,5000,0))==-1){ 
		handle_error();
		printf("Error Recv..."); 
		return 0; 
		} 
	msg[n_bytes]='\0'; 
	workmsg[secondn_bytes]='\0'; 
	printf("Client 1's Message:%s",msg); 
	printf("Client 2's Message:%s",workmsg); 
	} 
WSACleanup(); 
closesocket(sockfd);
closesocket(sockfd2); 
closesocket(sock_one); 
closesocket(sock_two); 
return 0; 
} 

void handle_error(void)
{
  switch ( WSAGetLastError() )
  {
    case WSANOTINITIALISED :
      printf("Unable to initialise socket.\n");
    break;
    case WSAEAFNOSUPPORT :
      printf("The specified address family is not supported.\n");
    break;
    case WSAEADDRNOTAVAIL :
      printf("Specified address is not available from the local machine.\n");
    break;
    case WSAECONNREFUSED :
      printf("The attempt to connect was forcefully rejected.\n"); 
      break; 
    case WSAEDESTADDRREQ : 
      printf("address destination address is required.\n");
    break;
    case WSAEFAULT :
      printf("The namelen argument is incorrect.\n");
    break;
    case WSAEINVAL :
      printf("The socket is not already bound to an address.\n");
    break;
    case WSAEISCONN :
      printf("The socket is already connected.\n");
    break;
    case WSAEADDRINUSE :
      printf("The specified address is already in use.\n");
    break;
    case WSAEMFILE : 
      printf("No more file descriptors are available.\n");
    break;
    case WSAENOBUFS :
      printf("No buffer space available. The socket cannot be created.\n");
    break;
    case WSAEPROTONOSUPPORT :
      printf("The specified protocol is not supported.\n");
      break; 
    case WSAEPROTOTYPE :
      printf("The specified protocol is the wrong type for this socket.\n");
    break;
    case WSAENETUNREACH : 
      printf("The network can't be reached from this host at this time.\n");
    break; 
    case WSAENOTSOCK :
       printf("The descriptor is not a socket.\n");
    break;
    case WSAETIMEDOUT :
      printf("Attempt timed out without establishing a connection.\n");
    break;
    case WSAESOCKTNOSUPPORT :
       printf("Socket type is not supported in this address family.\n");
    break;
    case WSAENETDOWN :
      printf("Network subsystem failure.\n");
    break;
    case WSAHOST_NOT_FOUND :
      printf("Authoritative Answer Host not found.\n");
    break;
    case WSATRY_AGAIN :
      printf("Non-Authoritative Host not found or SERVERFAIL.\n");
     break;
    case WSANO_RECOVERY :
       printf("Non recoverable errors, FORMERR, REFUSED, NOTIMP.\n");
    break;
    case WSANO_DATA :
      printf("Valid name, no data record of requested type.\n");
    break;
      case WSAEINPROGRESS :
      printf("address blocking Windows Sockets operation is in progress.\n");
    break;
    case WSAEINTR :
      printf("The (blocking) call was canceled via WSACancelBlockingCall().\n");
    break;
    default :
      printf("Unknown error.\n");
     break;
  }

}


now the problem when i run the program and try to send a message it does nothing. it does not display the message sent or display some error ( if any ).

can anyone help me shed light to this, or better yet give me a link in "How to listens to two different ports at the same time using C" i've tried to google it but the results a not that promising.

sorry for the long post.
any comment will be much appreciated

btw: i'm using mvc 6 and win2k

thanks in advance,
jaro

Reply With Quote
  #2  
Old January 2nd, 2006, 08:57 AM
jaro jaro is offline
Contributing User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Nov 2005
Posts: 35 jaro User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 1 Day 6 h 16 m 44 sec
Reputation Power: 4
Send a message via Yahoo to jaro
finally found the solution...
although the program sometimes hungs when i try to exit it...
anyways thats fine with me...
btw here is the code
Code:
#include <stdio.h>
#include <winsock.h> 
#include <process.h>

#define PORT 1200 
#define BACKLOG 4 
#define workPORT 7777 
#define workBACKLOG 4 
#define STRSIZE 16536
#define STRSIZETWO 16536

struct sockaddr_in server; 
struct sockaddr_in client;
int sockfd,sockfd2,n_bytes; 
char msg[5000]; 
struct sockaddr_in servertwo; 
struct sockaddr_in clienttwo;
int sock_one,secondn_bytes,sock_two; 
char workmsg[5000];

int recieveMessage(void);
int recieveMessageTwo(void);
void handle_error(void);

void errexit(const char *format, ...)
{
	va_list	args;
	va_start(args, format);
	vfprintf(stderr, format, args);
	va_end(args);
	WSACleanup();
	exit(1);
}


int main(){ 

WSADATA wsda; 
WSAStartup(0x0101,&wsda); 

	if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1){ 
	handle_error();
	printf("Socket error..."); 
	return 0; 
	} 

server.sin_addr.s_addr=INADDR_ANY; 
server.sin_port=htons(PORT); 
server.sin_family=AF_INET; 


	if((sock_one=socket(AF_INET,SOCK_STREAM,0))==-1){ 
	handle_error();
	printf("Socket error..."); 
	return 0; 
	} 

servertwo.sin_addr.s_addr=INADDR_ANY; 
servertwo.sin_port=htons(workPORT); 
servertwo.sin_family=AF_INET; 


	if(bind(sockfd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){ 
	handle_error();
	printf("Cannot bind..."); 
	return 0; 
	} 


	if(bind(sock_one,(struct sockaddr*)&servertwo,sizeof(struct sockaddr))==-1){ 
	handle_error();
	printf("Cannot bind..."); 
	return 0; 
	} 

	if(listen(sockfd,BACKLOG)){ 
	handle_error();
	printf("Error Listening..."); 
	return 0; 
	} 

	if(listen(sock_one,workBACKLOG)){ 
	handle_error();
	printf("Error Listening..."); 
	return 0; 
	} 



	while (1){ 

		if (_beginthread((void (*)(void *)) recieveMessage, STRSIZE, ( void *) sockfd) < 0) 
			{ 
				handle_error();
				errexit("_beginthread: %s\n", strerror(errno));
			}

		if (_beginthread((void (*)(void *)) recieveMessageTwo, STRSIZETWO, ( void *) sock_one) < 0) 
			{ 
				handle_error();
				errexit("_beginthread: %s\n", strerror(errno));
			}

	} 


WSACleanup(); 
closesocket(sockfd); 
closesocket(sockfd2); 
closesocket(sock_one);
closesocket(sock_two); 

return 0; 
} 


int recieveMessage(){
	int size=sizeof(struct sockaddr_in); 

		if((sockfd2=accept(sockfd,(struct sockaddr*)&client,&size))==-1){ 
		printf("Accept Error..."); 
		} 

		if((n_bytes=recv(sockfd2,msg ,50,0))==-1){ 
		printf("Error Recv..."); 
		} 

		msg[n_bytes]='\0'; 

		printf("Client's Message:%s",msg); 

return 0; 
}


int recieveMessageTwo(){
	int size2=sizeof(struct sockaddr_in); 

		if((sock_two=accept(sock_one,(struct sockaddr*)&clienttwo,&size2))==-1){ 

		printf("Accept Error..."); 

		} 

		if((secondn_bytes=recv(sock_two,workmsg ,5000,0))==-1){ 

		printf("Error Recv..."); 

		} 

		workmsg[secondn_bytes]='\0'; 

		printf("Client 2's Message:%s",workmsg); 

return 0; 
}

void handle_error(void)
{
  switch ( WSAGetLastError() )
  {
    case WSANOTINITIALISED :
      printf("Unable to initialise socket.\n");
    break;
    case WSAEAFNOSUPPORT :
      printf("The specified address family is not supported.\n");
    break;
    case WSAEADDRNOTAVAIL :
      printf("Specified address is not available from the local machine.\n");
    break;
    case WSAECONNREFUSED :
      printf("The attempt to connect was forcefully rejected.\n"); 
      break; 
    case WSAEDESTADDRREQ : 
      printf("address destination address is required.\n");
    break;
    case WSAEFAULT :
      printf("The namelen argument is incorrect.\n");
    break;
    case WSAEINVAL :
      printf("The socket is not already bound to an address.\n");
    break;
    case WSAEISCONN :
      printf("The socket is already connected.\n");
    break;
    case WSAEADDRINUSE :
      printf("The specified address is already in use.\n");
    break;
    case WSAEMFILE : 
      printf("No more file descriptors are available.\n");
    break;
    case WSAENOBUFS :
      printf("No buffer space available. The socket cannot be created.\n");
    break;
    case WSAEPROTONOSUPPORT :
      printf("The specified protocol is not supported.\n");
      break; 
    case WSAEPROTOTYPE :
      printf("The specified protocol is the wrong type for this socket.\n");
    break;
    case WSAENETUNREACH : 
      printf("The network can't be reached from this host at this time.\n");
    break; 
    case WSAENOTSOCK :
       printf("The descriptor is not a socket.\n");
    break;
    case WSAETIMEDOUT :
      printf("Attempt timed out without establishing a connection.\n");
    break;
    case WSAESOCKTNOSUPPORT :
       printf("Socket type is not supported in this address family.\n");
    break;
    case WSAENETDOWN :
      printf("Network subsystem failure.\n");
    break;
    case WSAHOST_NOT_FOUND :
      printf("Authoritative Answer Host not found.\n");
    break;
    case WSATRY_AGAIN :
      printf("Non-Authoritative Host not found or SERVERFAIL.\n");
     break;
    case WSANO_RECOVERY :
       printf("Non recoverable errors, FORMERR, REFUSED, NOTIMP.\n");
    break;
    case WSANO_DATA :
      printf("Valid name, no data record of requested type.\n");
    break;
      case WSAEINPROGRESS :
      printf("address blocking Windows Sockets operation is in progress.\n");
    break;
    case WSAEINTR :
      printf("The (blocking) call was canceled via WSACancelBlockingCall().\n");
    break;
    default :
      printf("Unknown error.\n");
     break;
  }
}

i'm using vc6 and my os is win2k also include the WSOCK32.lib and make it multithreaded in the "USe run time Library"

any comment here will be much appreciated ( especially if you some wrong convention that i've used )

- jaro

Reply With Quote
  #3  
Old January 11th, 2006, 03:10 AM
mox8iro mox8iro is offline
Registered User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jan 2006
Posts: 12 mox8iro User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 10 h 5 m 38 sec
Reputation Power: 0
dumb question

its being a while since i dealed with sockets..
but i have to ask
shouldnt the listening being done in each thread?
i mean in this way you v done it; the prgram cant listen for two connections at the same time doesnt it?

let me know if i am wrong

Reply With Quote
  #4  
Old January 11th, 2006, 09:35 PM
Geo.Garnett's Avatar
Geo.Garnett Geo.Garnett is offline
Registered Loser
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jul 2005
Location: Retardation Nation...
Posts: 347 Geo.Garnett User rank is Private First Class (20 - 50 Reputation Level)Geo.Garnett User rank is Private First Class (20 - 50 Reputation Level) 
Time spent in forums: 4 Days 3 h 13 m 45 sec
Reputation Power: 4
Send a message via AIM to Geo.Garnett
I think I would have to agree and I wouldn't see the reason why you would need to listen to two separate ports, Because If I'm not mistaken it is possible to have two or more clients connected through a single port, hence the extra open port would be unnecessary. But just my opinion.
__________________
---Official Member Of The Itsacon Fan Club---
Give a man a fish and he will eat for a day. Teach a man to fish and he will sit in a boat all day drinking beer.

Reply With Quote
  #5  
Old January 17th, 2006, 09:48 AM
Neuro Neuro is offline
Registered User
Dev Articles Newbie (0 - 499 posts)
 
Join Date: Jan 2006
Posts: 7 Neuro User rank is Just a Lowly Private (1 - 20 Reputation Level) 
Time spent in forums: 1 h 10 m 47 sec
Reputation Power: 0
I have just written a program (for Linux) that you might find useful.

you could easily create a seperate thread to handle each port and further threads to handle each client.

My program only does one port and you won't be able to execute it as you will also require a custom module. Important stuff is around line #46, although it'll prob confuse you a bit as you're writing for Windows.
C Code:
Original - C Code
  1. #include <netinet/in.h>
  2. #include <sys/types.h>
  3. #include <sys/socket.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <pthread.h>
  7. #include <strings.h>
  8. #include "stack.h"
  9.  
  10. int sd, balance;
  11. struct sockaddr_in servaddr, cliaddr;
  12. int exit_status;
  13. tstack* statement;
  14. tstack* slider;
  15. pthread_mutex_t ac_lock;
  16. const int zero = 0;
  17.  
  18. void* userconnect(int connfd);
  19.  
  20. int main(int argc, char** argv)
  21. {
  22.     int connfd;
  23.     pthread_t tid;
  24.    
  25.     pthread_mutex_init(&ac_lock, NULL);
  26.     balance = 100;
  27.  
  28.     if(argc < 2) {printf("more arguments needed\n"); return 1;}
  29.     printf("\033[2J"); printf("Press [CTRL-C] to exit this program.\n");
  30.     statement = NULL;
  31.  
  32.     /* Init Connection Tools*/
  33.  
  34.     printf("Opening balance: $100\n\n");
  35.     sd = socket(AF_INET,SOCK_STREAM,0);
  36.    
  37.     int clilen = sizeof(struct sockaddr_in);
  38.     bzero(&cliaddr,sizeof(cliaddr));
  39.     bzero(&servaddr,sizeof(servaddr));
  40.     servaddr.sin_family = AF_INET;
  41.     servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
  42.     servaddr.sin_port = htons(atoi(argv[1]));
  43.     bind(sd,(struct sockaddr*)&servaddr,sizeof(servaddr));
  44.     listen(sd, 10);
  45.  
  46.     while(1) {
  47.     connfd = accept(sd,(struct sockaddr*)&cliaddr,&clilen);
  48.     printf("id#%d | Connected accepted from  \"%s\" on Port:%d\n",connfd,inet_ntoa(cliaddr.sin_addr),ntohs(cliaddr.  sin_port));
  49.     pthread_create(&tid,NULL,userconnect,connfd);
  50.     }
  51.  
  52.     // END //
  53.     close(sd);
  54.     return exit_status;
  55. }
  56.  
  57. void* userconnect(int connfd) {
  58.  
  59. int data,mode,wait;
  60. int exit_flag;
  61. exit_flag = 0;
  62. while(!exit_flag) {
  63.     data = 0;
  64.     mode = 0;
  65.  
  66.     //printf("Waiting for data...\n");
  67.     wait = 1;
  68.     while(wait) {
  69.         if(recv(connfd,&data,sizeof(int),0)) { wait = 0; }
  70.     }
  71.  
  72.     //printf("Waiting for mode...\n");
  73.     wait = 1;
  74.     while(wait) {
  75.         if(recv(connfd,&mode,sizeof(int),0)) { wait = 0; }
  76.     }
  77.  
  78.     pthread_mutex_lock(&ac_lock);
  79.     switch(mode) {
  80.         case 1 : printf("id#%d | Balance Checked\n",connfd);
  81.              send(connfd,&balance,sizeof(int),0);
  82.              break;
  83.         case 2 : printf("id#%d | Funds Withdrawl, $%d\n",connfd,data);
  84.              s_push(data,mode,&statement);
  85.              balance = balance - data;
  86.              break;
  87.         case 3 : printf("id#%d | Deposit Made, $%d\n",connfd,data);
  88.              s_push(data,mode,&statement);
  89.              balance = balance + data;
  90.              break;
  91.         case 4 : printf("id#%d | Statement Requested\n",connfd);
  92.              send(connfd,&balance,sizeof(int),0);
  93.              slider = statement;
  94.              if(slider != NULL) { wait = 1; } else { wait = 0; } while(wait) {
  95.                 send(connfd,&slider->data,sizeof(int),0);
  96.                 send(connfd,&slider->mode,sizeof(int),0);
  97.                 slider = slider->next; if(slider==NULL){wait = 0;}
  98.              }
  99.              send(connfd,&zero,sizeof(int),0);
  100.              send(connfd,&zero,sizeof(int),0);
  101.              break;
  102.         case 5 : exit_flag = 1; break;
  103.     }
  104.     pthread_mutex_unlock(&ac_lock);
  105.  
  106. }
  107.     printf("id#%d | Connection closed\n",connfd); close(connfd);
  108. }

Reply With Quote
Reply

Viewing: Dev Articles Community ForumsProgrammingC/C++ Help > How to listens to two different ports at the same time


Thread Tools  Search this Thread 
Search this Thread:

Advanced Search
Display Modes  Rate This Thread 
Rate This Thread:


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
View Your Warnings | New Posts | Latest News | Latest Threads | Shoutbox
Forum Jump