#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#ifndef PORT
#define PORT 30758
#endif
#define MAXDATASIZE 1000
#define CONSIGNMENT 8
typedef struct client_list {
char *client_name;
int client_socket_fd;
struct client_list *next;
} client;
typedef struct item_list {
char *name;
char *number;
char *current_price;
char *minimum_price;
char *num_of_bids_left;
char *is_closed;
struct item_list *next;
} item;
void error(const char *error_message) {
perror(error_message);
exit(1);
}
int str_len(char *string) {
int count = 0;
while(*(string+count)!= '\n' && *(string+count)!= '\0') count++;
return count;
}
void send_message(int client_socket_fd, char *message, int length) {
if (write(client_socket_fd, message, length) < 0) error("ERROR writing to socket");
}
void read_message(int socket_fd, char *buffer, int display) {
size_t bytes; bzero(buffer,MAXDATASIZE);
if((bytes = read(socket_fd, buffer, MAXDATASIZE)) < 0) error("ERROR reading from socket");
if (display) write(1,buffer,bytes);
}
void send_items(item *item_list, int client_socket_fd) {
send_message(client_socket_fd, "Items available are:\n", 21);
while(item_list) {
send_message(client_socket_fd, item_list->number, str_len(item_list->number));
send_message(client_socket_fd, ".\nItem Name: ", 13);
send_message(client_socket_fd, item_list->name, str_len(item_list->name));
send_message(client_socket_fd, "\nCurrent Price: $", 17);
send_message(client_socket_fd, item_list->current_price, str_len(item_list->current_price));
send_message(client_socket_fd, "\nNumber Of Bids Left: ", 22);
send_message(client_socket_fd, item_list->num_of_bids_left, str_len(item_list->num_of_bids_left));
send_message(client_socket_fd, "\nIs Closed: ", 12);
send_message(client_socket_fd, item_list->is_closed, str_len(item_list->is_closed));
send_message(client_socket_fd, "\n", 1);
item_list = item_list->next;
}
}
int already_there(client *current, char *username) {
while(current) {
if (strcmp(current->client_name, username)==0) return(1);
current = current->next;
}
return(0);
}
client *add_client(char *username, client *client_list, int client_socket_fd) {
client *new_client = (client *)malloc(sizeof(client));
new_client->client_name = username;
new_client->client_socket_fd = client_socket_fd;
new_client->next = client_list;
return new_client;
}
item *add_item(char *name, char *number, char *current_price, char *num_of_bids_left, char *is_closed, item *item_list) {
item *new_item = (item *)malloc(sizeof(item));
new_item->name=name;
new_item->number=number;
new_item->current_price=current_price;
new_item->num_of_bids_left=num_of_bids_left;
new_item->is_closed=is_closed;
new_item->next=item_list;
return new_item;
}
---------- Post updated at 01:29 PM ---------- Previous update was at 01:25 PM ----------
client
int main(int argc, char *argv[]) {
int socket_fd;
struct sockaddr_in server_address;
struct hostent *server;
char *username, buffer[MAXDATASIZE];
if (argc == 3) username = getenv("USER");
else if (argc == 4) username = argv[3];
else error("Error, invalid number of arguments, need a hostname, port, and a user name (optional).\n");
bzero(buffer,MAXDATASIZE);
socket_fd = socket(AF_INET, SOCK_STREAM, 0);
if (socket_fd < 0) error("Error opening socket");
server = gethostbyname(argv[1]);
if (server == NULL) error("Error, no such host\n");
bzero((char *) &server_address, sizeof(server_address));
server_address.sin_family = AF_INET;
bcopy((char *)server->h_addr, (char *)&server_address.sin_addr.s_addr, server->h_length);
server_address.sin_port = htons(PORT);
if (connect(socket_fd,(struct sockaddr *) &server_address,sizeof(server_address)) < 0) error("Error connecting");
send_message(socket_fd, username, str_len(username));
read_message(socket_fd, buffer, 0);
if (strcmp(buffer, "Enter")==0) {
write(1,username,str_len(username)); write(1," successfully connected to ",27);
write(1,argv[1],str_len(argv[1])); write(1,"!\n",2);
send_message(socket_fd, "ok", 2);
read_message(socket_fd, buffer, 1);
}
else {
write(1,"User ",5); write(1,username,str_len(username));
write(1," already connected to ",22); write(1,argv[1],str_len(argv[1])); write(1,"!\n",2);
send_message(socket_fd, "ok", 2);
}
close(socket_fd);
return 0;
}
---------- Post updated at 01:29 PM ---------- Previous update was at 01:29 PM ----------
so far i only added support for one client at a time