Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- // -- multiplexing client - v1.0, by dono (2011)
- */
- // standard includes
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- // socket
- #include <unistd.h>
- #include <sys/socket.h>
- #include <sys/types.h>
- #include <netinet/in.h>
- #include <arpa/inet.h>
- #include <netdb.h>
- #define MAX 1024
- #define MIN 128
- // prototypes
- int wait_for_data(int sock);
- // global variables
- char in_buffer[MAX];
- char out_buffer[MAX];
- char user_input[MAX];
- int result, loop =1;
- // global socket variables
- int sock, server_port;
- struct sockaddr_in server_addr;
- struct hostent *server;
- int main(int argc, char *argv[])
- {
- // check for correct number of args
- if(argc != 4)
- {
- printf("usage: %s [server] [port] [handle]\n", argv[0]);
- exit(1);
- }
- // assign address, and port; get hostname
- server = gethostbyname(argv[1]);
- server_port = atoi(argv[2]);
- // set up remote server address structure
- memset(&server_addr, 0, sizeof(server_addr));
- server_addr.sin_family = AF_INET;
- bcopy((char *)server->h_addr, (char *) &server_addr.sin_addr.s_addr, server->h_length);
- server_addr.sin_port = htons(server_port);
- // create client socket
- sock = socket(AF_INET, SOCK_STREAM, 0);
- // connect to server socket
- connect(sock, (struct sockaddr *) &server_addr, sizeof(server_addr));
- printf("Connecting to %s on port %d\n", argv[1], server_port);
- // display server greeting
- memset(in_buffer, 0, MAX);
- recv(sock, in_buffer, sizeof(in_buffer), 0);
- if((strcmp(in_buffer, "Welcome to the server!")) == 0)
- {
- printf("%s\n", in_buffer);
- }
- else
- {
- printf("No server answering!\n");
- close(sock);
- exit(1);
- }
- // loop
- while(loop)
- {
- printf("[%s]: ", argv[3]);
- fgets(user_input, sizeof(user_input), stdin);
- sprintf(out_buffer, "[%s]: %s", argv[3], user_input);
- send(sock, out_buffer, sizeof(out_buffer), 0);
- result = wait_for_data(sock);
- if(result < 0)
- loop = 0;
- memset(in_buffer, 0, MAX);
- recv(sock, in_buffer, sizeof(in_buffer), 0);
- printf("%s", in_buffer);
- }
- printf("Closing socket\n");
- close(sock);
- return 0;
- }
- int wait_for_data(int sock)
- {
- fd_set fd;
- int result = 0;
- FD_ZERO(&fd);
- FD_SET(sock, &fd);
- result = select(sock+1, &fd, NULL, NULL, NULL);
- if(result == -1)
- return result;
- if(FD_ISSET(sock, &fd))
- return 1;
- return 0;
- }
Add Comment
Please, Sign In to add comment