Skip to content

BryanMorfe/skt_conn

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

22 Commits
 
 
 
 
 
 
 
 

Repository files navigation

skt_conn

Client-Server Communication Made Easy (in C)

Current Version: Unfinished

Index

Description

skt_conn is event-driven client-server communication interface for the C programming language.

Features

skt_conn can be:

  • Configured as a client to send messages to a server;
  • Configured as a server to receive messages from clients; and,
  • Configured for bidirection communication between an skt_conn configured client and an skt_conn configured server.

TODO

  • Code the C file
  • Finish the header file
  • Finish Installation guide
  • Update README with updated and correct examples
  • Test in different platforms

Platforms

N/A

Installing

N/A

Server

/* Handler */
void msg_handler(void *data);
int main()
{

    /* Server metadata */
    struct sc_meta serv;
    strcpy(serv.addr.ip_addr, "127.0.0.1");
    serv.port = 3463;
  
    /* Start listener */
    if(serv_listen(serv, ipv4, tcp) == -1) {
        // handle error
    }
  
    /* Receive data */
    void data[4096]; // 4Kb of data max
    serv_msg_rec(msg_handler, data);
  
    return 0;
}

Client

int main()
{

    /* Server metadata */
    struct sc_meta serv;
    strcpy(serv.addr.ip_addr, "192.168.1.65");
    serv.port = 3463;
  
    /* Prepare for Communication */
    if(clt_comm_prep(serv, ipv4, tcp) == -1) {
        // handle error
    }
  
    /* Send data */
    int dat_stat;
    void data[4096]; // 4Kb of data max
  
    // add some data to the buffer
  
    dat_stat = send_data(data);
  
    if (dat_stat == CLT_DATA_ERR) {
        // error sending data
    }
  
    close_comm();
  
    return 0;
}

Other

Getting Connection Status

int main()
{
    // Conn is established before
  
    /* Get connection status */
    struct conn_status status;
  
    get_conn_stat(&status);
  
    // Do whatever with status
    if (status.conn == UNS_CONN) {
        printf("Connection unsuccessful\n");
        exit(1);  
    }
}

Starting an Open Client-Server Bidirectional Communication

Server
/* Event handlers */
void new_clt_handler(struct sc_clt_meta *clts, int *n_clts);
void msg_handler(void *data);

int main()
{
    /* Server metadata */
    struct sc_meta serv;
    strcpy(serv.addr.ip_addr, "127.0.0.1");
    serv.port = 3463;
  
    /* Start listener */
    if(serv_listen(serv, ipv4, tcp) == -1) {
        // handle error
    }
    
    /* Event handlers */
    struct sc_clt_meta clts[32]; // Max 32 concurrent connections
    int n_clts = 0;
    
    /* Event: new connection; new client. 
     * new_clt_handler called when a new client connects 
     */
    serv_new_clt(clts, n_clts, 32, new_clt_handler);
    
    void data[4096]; // 4kb max in data
    /* Event: new message received from a client. 
     * msg_handler called when a new message (data) comes through 
     */
    serv_msg_rec(msg_handler, data);
    
    void msg[10];
    
    /* Send messages to connected clients */
    for (int i = 0; i < n_clts, i++)
        serv_msg_send(clts[i], msg);
}
Client
/* Event handlers */
void new_clt_handler(struct sc_clt_meta *clts, int *n_clts);
void msg_handler(void *data);

int main()
{
    /* Server metadata */
    struct sc_meta serv;
    strcpy(serv.addr.ip_addr, "127.0.0.1");
    serv.port = 3463;
  
    /* Client Prep */
    int status = clt_comm_prep(serv, ipv4, tcp);
}

Simple

About

Client-server communication made easy

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages