Hello,
I have a question about socket programming
The question was a homework of this university of past (2011?) course.
The server is simulating a sensor that provides readings of temperature, light and humidity (temp.dat, light.dat, humid.dat) each with single column of number, one per row.
The server will open each file, read in all sensor values, and serve every request from the client. If a client requests temperature, the server will return a certain temperature sample from temp.dat according to the time of the connection. Starting from the first value of temp.dat when a connection is established, every second the server should return the next value in temp.dat upon request. If EOF is reached, the server should wraps around and start from the beginning of the file again. Display readings to the screen:
I have attached the code in C for server and client parts, but I am quite obscure about reading the 3 files in the server side and display in the client side by request.
This is NOT my homework for any class, but for self study to understand basic server-client communication of socket programming in C.
Any suggestion is greatly appreciated and pseudo code is fine.
Here's code which reads files in order when given as commandline arguments:
Code:
#include <stdio.h>
char line[4096];
char **files=NULL;
int filenum=0;
FILE *file=NULL;
// Close current file if any, open next from files[]
FILE *next_file() {
if(file)
{
fclose(file);
file=NULL;
}
if(files[filenum] == NULL) return(file=NULL); // out of files
return(file=fopen(files[filenum++], "r"));
}
char *next_line(void) {
// Keep trying to get a line until we get a line or run out of files
while(1)
{
// If something is open, try and read it.
// If we read it, return the line.
if(file && fgets(line, 4096, file)) return(line);
// If we're out of files, return error immediately.
if(files[filenum] == NULL) return(NULL); // out of files
// Close current and open next file
next_file(files);
}
return(line);
}
void main(int argc, char *argv[]) {
// get list of files from argv.
// argv is organized like { "programname", "arg1", "arg2", "arg3", NULL }
files=argv;
filenum=1; // valid arguments in argv[] start at 1
while(next_line())
{
fputs(line, stdout);
sleep(3);
}
}
Being able to call next_line repeatedly without worrying about which file is open should make it easier.
Thanks!
Your code opens the file sequentially, but the output shows three values in a row, which seems to me the three files are opened simultaneously:
Code:
Connected to server!
Data returned by the server:
TEMPERATURE = 60 HUMIDITY = 40 LIGHT = 1
Data returned by the server:
TEMPERATURE = 59 HUMIDITY = 50 LIGHT = 2
Data returned by the server:
TEMPERATURE = 58 HUMIDITY = 20 LIGHT = 3
1) Is this right? I was thinking pthreads too, but not sure pthreads is the correct way.
2) I assumed this display part is piped in the client side. Can this part be embedded to the echoClient program, i.e. integrated this part into the echoClient program?
I am not using yours as your code sends the three file sequentially, but the required output sends three columns in a row, one at a time. That's why I concatenate three lines into one.
Code:
Connected to server!
Data returned by the server:
TEMPERATURE = 60 HUMIDITY = 40 LIGHT = 1
Data returned by the server:
TEMPERATURE = 59 HUMIDITY = 50 LIGHT = 2
Data returned by the server:
TEMPERATURE = 58 HUMIDITY = 20 LIGHT = 3
Your code sends the files one after another.
If I treat the three items (temperature, light, humidity) as a single intact record, then your output seems different from the sample output format, whereas my way seems to be what is required, except the following problems:
1)The whole dataset is output all at once, instead of individual record (3 numbers in a row);
2)The whole dataset is output in the way of 1) 30 times in total (which is exactly the total record numbers), that's what should be fixed.
Not sure if I missed some of your points. Thanks.
HI
Can anyone provide me with codes for file transfer server to client or vice versa?
Also please explain how to compile those programs in ubuntu terminal as i am totally new to socket programming.
Thanks (1 Reply)
i'm doing a simple program in socket programming on c i have server that can handle 2clients in a single machine i'm running ubuntu linux so i got it work but the probelm when clients send a message the server will echo it but i cant distinguish which client send the message client 1 or client... (7 Replies)
in socket programming how can i : Create for example 3 blank files, namely: server, client, network
•Server: act as servers/provider, will receive all requests from different client
•Client: requesters
•Network: middle-layer of communication between server & client
any tips or... (6 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)
Hello experts,
four machines need to communicate with each other. How can I start the socket programming. Can you please explain me more elaborated way.
Thank you for your time and effort in advance (4 Replies)
Hi,
I wanted to write a socket program in C, where I always want my socket connected to the server. i.e i shouldn't get disconnected once i get the response back from the server. I want to work in the connected mode, instead of disconnect and connect.
Can somebody please kindly provide me a... (3 Replies)
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)
Hi ,
I'm facing the following problem in socket programming.
My structure is
struct {
int i;
char *str;
}samp;
I'm creating the pointer to this structure and assigning the value to the structure members and send via the socket to the another process.
The receiver process when... (7 Replies)
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)