Why TCP ECHO Not Work between distant Hosts?
- From: "june" <gahaja@xxxxxxxxx>
- Date: 2 Dec 2006 23:04:49 -0800
Hi! I'm June.
This time I have this question:
TCP ECHO works well if I run both TCPServer.EXE and TCPClient.EXE in
the same computer.
However, it didn't work if I run these two programs in serparate
computers.
At a Server with IP 163.239.209.16, I typed,
c:\> TCPServer 9019
And at client computer I typed,
c:\>TCPClient 163.239.209.16 9019
Then TCPClient.EXE says "connect() error!"
What is wrong? I'd be grateful if you tell me:p
-For reference I put both TCPServer.EXE and TCPClient.EXE
1. TCPServer.EXE
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define BUFSIZE 1024
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hServSock;
SOCKET hClntSock;
char message[BUFSIZE];
int strLen;
SOCKADDR_IN servAddr;
SOCKADDR_IN clntAddr;
int clntAddrSize;
if(argc!=2){
printf("Usage : %s <port>\n", argv[0]); /* Usage */
exit(1);
}
if(WSAStartup(MAKEWORD(2, 2), &wsaData) !=0) /* load winsock 2.2
dll*/
ErrorHandling("WSAStartup() error!");
hServSock=socket(PF_INET, SOCK_STREAM, 0); /* Set to IPv4, TCP */
if(hServSock == INVALID_SOCKET)
ErrorHandling("socket() error");
memset(&servAddr, 0, sizeof(servAddr)); /* initialization of
structure */
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=htonl(INADDR_ANY); /* IP allocation */
servAddr.sin_port=htons(atoi(argv[1]));
if(bind(hServSock, (SOCKADDR*) &servAddr,
sizeof(servAddr))==SOCKET_ERROR)
ErrorHandling("bind() error"); /* bind */
if(listen(hServSock, 5)==SOCKET_ERROR)
ErrorHandling("listen() error"); /* listen */
clntAddrSize=sizeof(clntAddr);
hClntSock=accept(hServSock, (SOCKADDR*)&clntAddr, &clntAddrSize);
if(hClntSock==INVALID_SOCKET)
ErrorHandling("accept() error"); /* accept */
/*----------------------------------------------------------------------------------*/
/* core of echo server : Server displays data on Server console,
and returns data back to client */
while( (strLen=recv(hClntSock, message, BUFSIZE, 0)) !=0){
send(hClntSock, message, strLen, 0);
message[strLen] = '\0'; /* I put null terminator
for received message */
printf("%7s\n", message); /* Display received message
on Server console */
}
/*----------------------------------------------------------------------------------*/
closesocket(hClntSock); /* end */
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
2. TCPClient
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <winsock2.h>
#define BUFSIZE 1024
void ErrorHandling(char *message);
int main(int argc, char **argv)
{
WSADATA wsaData;
SOCKET hSocket;
char message[BUFSIZE];
int strLen;
SOCKADDR_IN servAddr;
if(argc!=3)
{
printf("Usage : %s <IP> <port>\n", argv[0]); /* Usage */
exit(1);
}
if(WSAStartup(MAKEWORD(2, 2), &wsaData) !=0) /* load winsock 2.2
dll*/
ErrorHandling("WSAStartup() error!");
hSocket=socket(PF_INET, SOCK_STREAM, 0); /* set to IPv4,
TCP */
if(hSocket == INVALID_SOCKET)
ErrorHandling("socket() error"); /* generate socket
*/
memset(&servAddr, 0, sizeof(servAddr)); /* structure
initialization */
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr(argv[1]);
servAddr.sin_port=htons(atoi(argv[2]));
if(connect(hSocket, (SOCKADDR*)&servAddr,
sizeof(servAddr))==SOCKET_ERROR)
ErrorHandling("connect() error!"); /* connect */
while(1)
{
fputs("Enter message to send! (Q to quit) : ", stdout);
fgets(message, BUFSIZE, stdin); /* input from
keyboard */
if(!strcmp(message, "q\n")) /* Q to quit */
break;
/* --------------------------ECHO
CORE------------------------------*/
send(hSocket, message, strlen(message),0); /* send msg */
strLen=recv(hSocket, message, BUFSIZE-1, 0); /* receive msg */
/*------------------------------------------------------------------------*/
message[strLen]=0;
printf("Echo from Server : %s \n", message);
}
closesocket(hSocket);
WSACleanup();
return 0;
}
void ErrorHandling(char *message)
{
fputs(message, stderr);
fputc('\n', stderr);
exit(1);
}
-------------------------------
Thank you for reading and I hope you can help me:p
.
- Follow-Ups:
- Re: Why TCP ECHO Not Work between distant Hosts?
- From: Joseph M . Newcomer
- Re: Why TCP ECHO Not Work between distant Hosts?
- From: Norbert Unterberg
- Re: Why TCP ECHO Not Work between distant Hosts?
- Prev by Date: Re: A question regarding use of the Test Container to check ActiveX controls
- Next by Date: Re: Internationalizing an app
- Previous by thread: Linking DLL's across different compilers and languages
- Next by thread: Re: Why TCP ECHO Not Work between distant Hosts?
- Index(es):
Relevant Pages
|