TCP Client Server BSD Socket c++
up vote
-1
down vote
favorite
I wanna make 3 programms- client, server and dotmaker.
In this case when i started in 2 terminal in first ./server, in second ./client and in client i wrote for example "abcd" i got just once "a.b.c.d", after this my server is not respoding.
I want enter a many messages and get a dotted message every time.
i got this:
./server
Czekam....
Connection accepted from 0.208.246.183:62647
g.o.o.d.b.y.e.
./client
Connected to Server.
Client: goodbye
Server: goodbye
Client: goodbye2
Here is the code
dot.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main(int argc, char *argv)
string c="";
c=argv[1];
for(int i=0;i<strlen(argv[1]);i++)
cout<<c[i]<<".";
cout<<endl;
return 0;
client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
int main()
int clientSocket, i;
struct sockaddr_in serverAddr;
char buffer[1024];
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, '', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i = connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
printf("Connected to Server.n");
while(1)
printf("Client: t");
scanf("%s", &buffer[0]);
send(clientSocket, buffer, strlen(buffer),0);
if(sizeof(buffer)==0)
printf("Disconnected from server.n");
close(clientSocket);
exit(1);
recv(clientSocket, buffer,1024,0);
printf("Server: t%sn", buffer);
return 0;
server.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main()
socklen_t addr_size;
char buffer[1024];
pid_t childpid;
int newSocket,status;
struct sockaddr_in newAddr;
int sock,i,j;
struct sockaddr_in serverAddr;
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i= bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
listen(sock, 10);
printf("Czekam....n");
while(1)
newSocket = accept(sock, (struct sockaddr*)&newAddr, &addr_size);
if(newSocket < 0)
exit(1);
printf("Connection accepted from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
if((childpid = fork()) == 0)
close(sock);
while(1)
if(recv(newSocket, buffer, 1024,0)==0)
printf("Disconnected from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
break;
else
sleep(1);
send(newSocket,buffer,strlen(buffer),0);
execlp("./kropka","./kropka",buffer,NULL);
exit(1);
else
wait(NULL);
close(newSocket);
return 0;
c++
|
show 2 more comments
up vote
-1
down vote
favorite
I wanna make 3 programms- client, server and dotmaker.
In this case when i started in 2 terminal in first ./server, in second ./client and in client i wrote for example "abcd" i got just once "a.b.c.d", after this my server is not respoding.
I want enter a many messages and get a dotted message every time.
i got this:
./server
Czekam....
Connection accepted from 0.208.246.183:62647
g.o.o.d.b.y.e.
./client
Connected to Server.
Client: goodbye
Server: goodbye
Client: goodbye2
Here is the code
dot.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main(int argc, char *argv)
string c="";
c=argv[1];
for(int i=0;i<strlen(argv[1]);i++)
cout<<c[i]<<".";
cout<<endl;
return 0;
client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
int main()
int clientSocket, i;
struct sockaddr_in serverAddr;
char buffer[1024];
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, '', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i = connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
printf("Connected to Server.n");
while(1)
printf("Client: t");
scanf("%s", &buffer[0]);
send(clientSocket, buffer, strlen(buffer),0);
if(sizeof(buffer)==0)
printf("Disconnected from server.n");
close(clientSocket);
exit(1);
recv(clientSocket, buffer,1024,0);
printf("Server: t%sn", buffer);
return 0;
server.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main()
socklen_t addr_size;
char buffer[1024];
pid_t childpid;
int newSocket,status;
struct sockaddr_in newAddr;
int sock,i,j;
struct sockaddr_in serverAddr;
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i= bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
listen(sock, 10);
printf("Czekam....n");
while(1)
newSocket = accept(sock, (struct sockaddr*)&newAddr, &addr_size);
if(newSocket < 0)
exit(1);
printf("Connection accepted from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
if((childpid = fork()) == 0)
close(sock);
while(1)
if(recv(newSocket, buffer, 1024,0)==0)
printf("Disconnected from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
break;
else
sleep(1);
send(newSocket,buffer,strlen(buffer),0);
execlp("./kropka","./kropka",buffer,NULL);
exit(1);
else
wait(NULL);
close(newSocket);
return 0;
c++
why do you need to fork?
– OznOg
Nov 10 at 20:15
2
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
1
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35
|
show 2 more comments
up vote
-1
down vote
favorite
up vote
-1
down vote
favorite
I wanna make 3 programms- client, server and dotmaker.
In this case when i started in 2 terminal in first ./server, in second ./client and in client i wrote for example "abcd" i got just once "a.b.c.d", after this my server is not respoding.
I want enter a many messages and get a dotted message every time.
i got this:
./server
Czekam....
Connection accepted from 0.208.246.183:62647
g.o.o.d.b.y.e.
./client
Connected to Server.
Client: goodbye
Server: goodbye
Client: goodbye2
Here is the code
dot.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main(int argc, char *argv)
string c="";
c=argv[1];
for(int i=0;i<strlen(argv[1]);i++)
cout<<c[i]<<".";
cout<<endl;
return 0;
client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
int main()
int clientSocket, i;
struct sockaddr_in serverAddr;
char buffer[1024];
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, '', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i = connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
printf("Connected to Server.n");
while(1)
printf("Client: t");
scanf("%s", &buffer[0]);
send(clientSocket, buffer, strlen(buffer),0);
if(sizeof(buffer)==0)
printf("Disconnected from server.n");
close(clientSocket);
exit(1);
recv(clientSocket, buffer,1024,0);
printf("Server: t%sn", buffer);
return 0;
server.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main()
socklen_t addr_size;
char buffer[1024];
pid_t childpid;
int newSocket,status;
struct sockaddr_in newAddr;
int sock,i,j;
struct sockaddr_in serverAddr;
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i= bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
listen(sock, 10);
printf("Czekam....n");
while(1)
newSocket = accept(sock, (struct sockaddr*)&newAddr, &addr_size);
if(newSocket < 0)
exit(1);
printf("Connection accepted from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
if((childpid = fork()) == 0)
close(sock);
while(1)
if(recv(newSocket, buffer, 1024,0)==0)
printf("Disconnected from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
break;
else
sleep(1);
send(newSocket,buffer,strlen(buffer),0);
execlp("./kropka","./kropka",buffer,NULL);
exit(1);
else
wait(NULL);
close(newSocket);
return 0;
c++
I wanna make 3 programms- client, server and dotmaker.
In this case when i started in 2 terminal in first ./server, in second ./client and in client i wrote for example "abcd" i got just once "a.b.c.d", after this my server is not respoding.
I want enter a many messages and get a dotted message every time.
i got this:
./server
Czekam....
Connection accepted from 0.208.246.183:62647
g.o.o.d.b.y.e.
./client
Connected to Server.
Client: goodbye
Server: goodbye
Client: goodbye2
Here is the code
dot.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main(int argc, char *argv)
string c="";
c=argv[1];
for(int i=0;i<strlen(argv[1]);i++)
cout<<c[i]<<".";
cout<<endl;
return 0;
client
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#define PORT 4444
int main()
int clientSocket, i;
struct sockaddr_in serverAddr;
char buffer[1024];
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, '', sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i = connect(clientSocket, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
printf("Connected to Server.n");
while(1)
printf("Client: t");
scanf("%s", &buffer[0]);
send(clientSocket, buffer, strlen(buffer),0);
if(sizeof(buffer)==0)
printf("Disconnected from server.n");
close(clientSocket);
exit(1);
recv(clientSocket, buffer,1024,0);
printf("Server: t%sn", buffer);
return 0;
server.cc
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/wait.h>
#define PORT 4444
#include <iostream>
using namespace std;
int main()
socklen_t addr_size;
char buffer[1024];
pid_t childpid;
int newSocket,status;
struct sockaddr_in newAddr;
int sock,i,j;
struct sockaddr_in serverAddr;
sock = socket(AF_INET, SOCK_STREAM, 0);
memset(&serverAddr, 0, sizeof(serverAddr));
serverAddr.sin_family = AF_INET;
serverAddr.sin_port = htons(PORT);
serverAddr.sin_addr.s_addr = inet_addr("127.0.0.1");
i= bind(sock, (struct sockaddr*)&serverAddr, sizeof(serverAddr));
listen(sock, 10);
printf("Czekam....n");
while(1)
newSocket = accept(sock, (struct sockaddr*)&newAddr, &addr_size);
if(newSocket < 0)
exit(1);
printf("Connection accepted from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
if((childpid = fork()) == 0)
close(sock);
while(1)
if(recv(newSocket, buffer, 1024,0)==0)
printf("Disconnected from %s:%dn", inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
break;
else
sleep(1);
send(newSocket,buffer,strlen(buffer),0);
execlp("./kropka","./kropka",buffer,NULL);
exit(1);
else
wait(NULL);
close(newSocket);
return 0;
c++
c++
asked Nov 10 at 20:08
owczar95
1
1
why do you need to fork?
– OznOg
Nov 10 at 20:15
2
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
1
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35
|
show 2 more comments
why do you need to fork?
– OznOg
Nov 10 at 20:15
2
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
1
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35
why do you need to fork?
– OznOg
Nov 10 at 20:15
why do you need to fork?
– OznOg
Nov 10 at 20:15
2
2
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
1
1
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35
|
show 2 more comments
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
active
oldest
votes
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53242971%2ftcp-client-server-bsd-socket-c%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
why do you need to fork?
– OznOg
Nov 10 at 20:15
2
Before you start writing any code, write down a specification for the protocol your server and client will use to exchange data. Otherwise, it will be impossible to determine what to fix if the server and client don't work. Is the server wrong? Is the client wrong? How can you tell if you don't have a specification to compare them both to? If you're going to exchange messages, you need a message protocol. TCP is not a message protocol. So you'll have to build one on top of TCP.
– David Schwartz
Nov 10 at 20:26
my server need to service a lot of clients
– owczar95
Nov 10 at 20:27
the main problem of this programm is execlp, without it everything working well. I mean instead of line in server execlp("./kropka","./kropka",buffer,NULL) use " cout<<buffer<<endl; "
– owczar95
Nov 10 at 20:32
1
@owczar95 Unfortunately, your code is working largely by luck. This makes it hard to find and identify the various problems because they aren't causing your code to fail. At a minimum, you absolutely must write functions to send and receive messages because your application requires you to be able to send and receive messages and nowhere do you have code that has any ability to do that. TCP is not a message protocol. You can build a message protocol on top of TCP, but you have to actually write code to do that.
– David Schwartz
Nov 10 at 20:35