Hello,
I'm trying to create a serer and clients. but then i added more that 1 client the server does not know with one client to send back to !
I think it's on
send(newSocket, name, strlen(name), 0);
all what i want to server send back to the client, but not the same client.
different if there are 2 client
Server:
Code:
#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<inttypes.h>
#definePORT4444
intfindIndex(int *array, size_tsize, inttarget)
{
int i = 0;
while ((i < size) && (array != target))
i++;
return (i < size) ? (i) : (-1);
}
intmain()
{
int countclients = 0;
constchar *clients[] = { };
constchar *checkclients[] = { };
int sockfd, ret;
struct sockaddr_in serverAddr;
int newSocket;
struct sockaddr_in newAddr;
charname[1024];
charage[1024];
charholdname[1024];
pid_t childpid;
sockfd = socket(AF_INET, SOCK_STREAM, 0);
if (sockfd < 0) {
printf("[-]Error in connection. \n");
exit(1);
}
printf("[+]Server Socket is created. \n");
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");
ret = bind(sockfd, (struct sockaddr *) &serverAddr, sizeof(serverAddr));
if (ret < 0) {
printf("[-]Error in binding");
exit(1);
}
printf("[+]Bind port to %d\n", PORT);
if (listen(sockfd, 10) == 0) {
printf("Listening....\n");
} else {
printf("[-]Error in binding. \n");
}
while (1) {
socklen_t newAddrLength = sizeof(newAddr);
newSocket = accept(sockfd, (struct sockaddr *) &newAddr, &newAddrLength);
if (newSocket < 0) {
exit(1);
}
// printf("%d", newSocket[0]);
printf("login to server: \n");
printf("Connection accepted from %s:%" PRIu16 "\n",
inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
if ((childpid = fork()) == 0) {
printf("check childpid: \n");
close(sockfd);
while (1) {
printf("check childpid inside while: \n");
recv(newSocket, name, 1024, 0);
recv(newSocket, age, 1024, 0);
if (strcmp(name, ":exit") == 0) {
printf("disconnection from %s:%" PRIu16 "\n",
inet_ntoa(newAddr.sin_addr), ntohs(newAddr.sin_port));
} else {
printf("send and recive code: \n");
charnameinserver[1024];
charageinserver[1024];
for (int i = 0; i <= countclients; i++) {
printf("works \n");
charconnectclient[1024];
sprintf(connectclient, "%s:%d", inet_ntoa(newAddr.sin_addr),
ntohs(newAddr.sin_port));
clients = connectclient;
charcheckclient[1024];
sprintf(checkclient, "%s:%d", inet_ntoa(newAddr.sin_addr),
ntohs(newAddr.sin_port));
if (strcmp(checkclient, clients) == 0) {
checkclients = checkclient;
sprintf(nameinserver, "%s Name: %s", checkclients, name);
sprintf(ageinserver, "%s Age: %s", checkclients, age);
} else {
countclients++;
charconnectclient[1024];
sprintf(connectclient, "%s:%d", inet_ntoa(newAddr.sin_addr),
ntohs(newAddr.sin_port));
clients[i + 1] = connectclient;
charcheckclient[1024];
sprintf(checkclient, "%s:%d", inet_ntoa(newAddr.sin_addr),
ntohs(newAddr.sin_port));
sprintf(nameinserver, "%s Name: %s", checkclients[i + 1], name);
sprintf(ageinserver, "%s Age: %s", checkclients[i + 1], age);
}
}
printf("%s\n", nameinserver);
printf("%s\n", ageinserver);
send(newSocket, name, strlen(name), 0);
send(newSocket, age, strlen(age), 0);
bzero(name, sizeof(name));
bzero(age, sizeof(age));
// break;
}
}
}
}
printf("close \n");
close(newSocket);
return0;
}
Client:
Code:
#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>
#definePORT4444
intmain()
{
int clientSocket, ret;
struct sockaddr_in serverAddr;
charname[1024];
charage[1024];
clientSocket = socket(AF_INET, SOCK_STREAM, 0);
if (clientSocket < 0) {
printf("[-]Error in cannection. \n");
exit(1);
}
printf("[+]Client Spcket is created \n");
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");
ret =
connect(clientSocket, (struct sockaddr *) &serverAddr,
sizeof(serverAddr));
if (ret < 0) {
printf("[-]Error in conncation");
exit(1);
}
while (1) {
printf("Client Name: ");
scanf("%s", &name[0]);
printf("Client Age: ");
scanf("%s", &age[0]);
send(clientSocket, name, strlen(name), 0);
send(clientSocket, age, strlen(age), 0);
if (strcmp(name, ":exit") == 0 || strcmp(age, ":exit") == 0) {
close(clientSocket);
printf("[-]Disconnected from server");
exit(1);
}
if (recv(clientSocket, name, 1024, 0) < 0
|| recv(clientSocket, age, 1024, 0) < 0) {
printf("[-]Error in receivng data \n");
} else {
printf("Server: \t%s\n", name);
printf("Server: \t%s\n", age);
}
}
return0;
}
Thanks for helping me