In the server code just create the socket . Then bind the socket in the specific address.Then listen to the connection from the client.If any new client try to connect with the server accept that client have that client id in the set.
In the client side also create a socket , then connect to the server socket .Then using the various read ,write methods you can make your client and server to communicate.
If you do this in c , following are the functions for the various job,
thank u dude but i'm new to this stuff can u recommend me any reference to read or can u just write me the server code so i'll try to do the rest..thanks in advance
This is the server program. This server will handle multiple clients.
The client will send some request messages. you need to enter that message.
Then the will server will receive that message.
After that the server send some acknowledgment message like "Server got your request".
This will be like chatting between the server and the client.
Code:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <sys/time.h>
#include <signal.h>
#include <fcntl.h>
#define SIZE 100
//signal handler for sigpipe signal
void sig_handler(int signo)
{
if(signo == SIGPIPE)
{
printf("Signal Received\n");
}
}
int main()
{
int server_sockfd,client_sockfd;
int sfd=0;
int fd;
int server_len,client_len;
int select_retval;
char buf[SIZE];
struct sockaddr_un server_address;
struct sockaddr_un client_address;
struct timeval timebuf;
fd_set read_fds,set;
//Register the SIGPIPE signal
signal(SIGPIPE,sig_handler);
//Remove the old socket
unlink("Server_Multi_TCP");
//creating the socket
if((server_sockfd = socket(AF_UNIX,SOCK_STREAM,0))==-1)
{
perror("socket error");
exit(0);
}
//Naming the socket
server_address.sun_family = AF_UNIX;
strcpy(server_address.sun_path,"Server_Multi_TCP");
server_len = sizeof(server_address);
if((bind (server_sockfd,(struct sockaddr *)&server_address,server_len))==-1)
{
perror("bind error");
exit(0);
}
//create a connection queue and waiting for clients
if(listen(server_sockfd,5)==-1)
{
perror("listen error");
exit(0);
}
if(server_sockfd > sfd)
sfd = server_sockfd;
FD_ZERO(&set);
FD_SET(server_sockfd,&set);
//select time value
struct timeval tv;
/*tv.tv_sec = 10; //number of seconds to wait
tv.tv_usec = 500000; //number of micro seconds to wait*/
while(1)
{
read_fds = set;
printf("Server is Waiting\n");
//Accept a connection
if ((select_retval = select(sfd+1,&read_fds,NULL,NULL,NULL))==-1)
{
perror("select error");
exit(0);
}
for (fd = 0;fd<=sfd;fd++)
{
if(FD_ISSET(fd,&read_fds))
{
if(fd==server_sockfd)
{
client_len = sizeof(client_address);
if((client_sockfd = accept(server_sockfd,NULL,0))==-1)
{
perror("accept error");
exit(0);
}
write(client_sockfd,"Server got your request\n",24);
FD_SET(client_sockfd,&set);
if(client_sockfd > sfd)
sfd = client_sockfd;
}
else
{
int nread;
nread = read(fd,buf,sizeof(buf));
buf[nread] = '\0';
if(nread == 0)
{
FD_CLR(fd,&set);
if(fd == sfd)
sfd--;
printf("Client %d is closed\n",sfd);
close(fd);
}
else
{
printf("Server got message %s from client\n",buf,sfd);
write(fd,"server listening\n",17);
}
}
}
}
}
close(server_sockfd);
}
This is the proper client program.
Code:
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <sys/un.h>
#include <unistd.h>
#include <stdlib.h>
#include <fcntl.h>
#include <signal.h>
void sig_handler(int);
int main()
{
int sockfd;
int len;
struct sockaddr_un address;
int result;
char ch[100] ;
char ch1[100];
int n;
//registering the SIGPIPE signal
signal(13,sig_handler);
//creating socket for client
sockfd = socket(AF_UNIX,SOCK_STREAM,0);
//name the socket agreed with the server
address.sun_family = AF_UNIX;
strcpy(address.sun_path, "server_socket");
len = sizeof(address);
//now connect our socket to the server's socket
result = connect(sockfd,(struct sockaddr *)&address,len);
if (result == -1)
{
perror("oops:client1");
exit(1);
}
//now read and write via socket
while(1)
{
printf("Enter the data\n");
n=read(0,ch,100);
// printf("read return:%d\n",n);
char close[100]= "client closed";
if (n==0)
{
write(sockfd,close,sizeof(close));
exit(0);
}
n=write(sockfd,ch,n);
// printf("write return:%d\n",n);
// sleep(3);
// printf("Reply from server:");
n=read(sockfd,ch1,100);
if (n==0)
{
printf("Sorry! Server is closed\n");
printf("Bye!Bye!\n");
exit(0);
}
write(1,"Message from server:\n",21);
write(1,ch1,n);
//printf("%c",ch1);
}
close(sockfd);
exit(0);
}
void sig_handler(int signo)
{
if (signo == SIGPIPE)
{
printf("SIGPIPE SIGNAL RECEIVED\n");
exit(0);
}
}
Boa tarde galera,tenho conhecimentos básicos sobre sockets mas preciso algo mais avançado para resolver meu trabalho.vou passar a descrição dele aqui, espero que me ajudem.muito Obrigado!!
Esse projeto trata-se de uma aplicação distribuída onde um servidor tem a capacidade de solicitar aos
clientes a ele conectados a execução de uma aplicação.
O servidor deve oferecer um “console” que permita ao administrador executar os seguintes comandos:
· List: Mostra todos os clientes conectados ao servidor.
· Execute <cliente> <aplicação>: Envia uma requisição ao <cliente> para que ele execute a
<aplicação>. O <cliente> é identificado por seu endereço IP e a <aplicação> pelo seu endereço
no sistema de arquivos do <cliente>.
· Show <cliente>: Mostra ao usuário todos os processos (requisitados pelo servidor) que estão
em execução no <cliente>. Para cada processo listado devem ser apresentados os percentuais
de uso de memória e CPU como também o PID (process ID) do processo.
· Kill <cliente> <pid>: Finaliza a execução do processo identificado por <pid> no <cliente>.
Características de Implementação
O servidor deve ser implementado de maneira que quando os comandos Execute e Kill forem
executados, a comunicação (síncrona) entre cliente e servidor ocorra por meio de uma conexão TCP/IP.
Quando um comando Execute for executado por um cliente é preciso que seja feito uso da primitiva
fork() para carregar o processo desejado. Após isso, deve ser retornado ao servidor o PID desse novo
processo. Em uma requisição Kill o cliente deve finalizar a execução do processo identificado, também por
meio da primitiva apropriada para tal função (veja exemplo no aula-rede). Deve ser retornada ao servidor
uma mensagem identificando o sucesso ou falha na execução.
As aplicações clientes devem enviar periodicamente para o servidor uma mensagem assíncrona
(utilizando o protocolo UDP/IP) referente a cada processo executado por meio de requisição do usuário. Essa
mensagem deve conter os percentuais de uso de CPU e memória do processo. Dessa forma, quando o usuário
executar o comando “Show <cliente>” todas essas informações já estarão no servidor, dispensando a
comunicação com o cliente.
Com o objetivo de garantir o correto processamento dos dados é preciso realizar a criação de um
protocolo de aplicação (conforme visto em sala de aula) para realizar o tratamento do stream de dados do
protocolo TCP.
---------- Post updated 03-31-10 at 06:42 AM ---------- Previous update was 03-30-10 at 03:33 PM ----------
Good afternoon guys, I have basic knowledge about sockets but I need something more advanced trabalho.vou going to solve my description of it here, I hope you ajudem.muito Thanks!
This project it is a distributed application where a server has the ability to ask
customers connected to it to run an application.
The server must offer a "console" that allows the administrator to run the following commands:
> List: Shows all clients connected to the server.
· Perform <cliente> <application>: Sends a request to <cliente> for it to execute the
<application>. The <cliente> is identified by its IP address and the address <application>
the file system <cliente>.
<cliente> First show: Tell the user all processes (required by the server) that are
running on <cliente>. For each process listed the percentages should be presented
memory usage and CPU as well as the PID (process ID) of the process.
· Kill <cliente> <pid>: Terminate the execution of the process identified by the <pid> <cliente>.
Characteristics of Implementation
The server must be implemented so that when the commands are Run and Kill
executed, the communication (synchronous) between client and server occurs through a TCP / IP.
When a Run command is executed by a client it needs to be made use of primitive
fork () to load the desired process. After that, it should be returned to this new server PID
process. In a requisition Kill the customer must finalize the implementation of the identified process, also
through the primitive appropriate for this function (see example in-class network). Should be returned to the server
a message identifying the success or failure to perform.
The client application must periodically send a message to the server asynchronously
(Using UDP / IP) for each process performed by user request. That
message shall contain the percentage of CPU usage and memory process. Thus, when the user
run the command "Show <cliente>" all this information will already be on the server, eliminating the
communication with the customer.
Aiming to ensure the correct processing of data must be undertaken to establish a
application protocol (as seen in the classroom) to accomplish the processing of stream data
TCP protocol.
Hi everyone,
I'm new to this forum. I'm working on new project for last few days and this forum already helped me on
couple of occasions. I don't have any prior experience with network programming so I'll appreciate any advise given.
I'm trying to do the following:
1. open user... (2 Replies)
hi guys i got this code trying to make connection between the server and multi clients but when i do ./server i got message server waiting then when i run ./client it says client 1 nosuch file i dont know whats that should i use any argument plz help how to compile and run and whats the expected... (1 Reply)
i m using sockets for setting up a connection between a server and a client.
When the clients gets connected to the server, its ip is conveyed to the server through one of the predefined structures in c library...
i save this ip address in an array....1st client's ip address goes to the zeroth... (1 Reply)
Hello Everyone
Iam working on tcp/ip programming.with some time interval server has to send data.client has to close the connection and to open the connection between the time interval.this is the scenario
when iam closing the connection in client side the connection terminates.how to... (1 Reply)
my system is a stand alone system... i want to try doing socket porgramming..ihave heard that this is usually done during testing...
how can i do that....? (6 Replies)
Can anyone plz me. I need a sample code for the following description.
Its urgent.
It is C/Socket program with the following descriptions:
NAME
coreadServer - Concurrent Readers Server.
coreadClient - Concurrent Readers Client.
SYNOPSIS
coreadServer <OutputFile>
coreadClient <n>... (1 Reply)
Hello,
I actually try to make client-server program.
I'm using SCO OpenServer Release 5.0.0 and when I try to compile my code (by TELNET) I've got this error :
I'm just using this simple code :
and I get the same error if I use :
If someone can help me,
Thanks (2 Replies)