- #include <stdio.h>
- #include <netdb.h>
- #include <sys/types.h>
- #include <sys/socket.h>
- #include <netinet/in.h>
- #include <errno.h>
- #include <stdlib.h>
- #include <strings.h>
- #include <arpa/inet.h>
- #include <unistd.h>
- #include <string.h>
- #include "client.h"
- #include "ui_client.h"
- #define SERVER_TCP_PORT 7000 // Default port
- #define BUFLEN 255 // Buffer length
- #define USRSIZE 100
- Client::Client(QWidget *parent) :
- QMainWindow(parent),
- ui(new Ui::Client)
- {
- ui->setupUi(this);
- }
- Client::~Client()
- {
- delete ui;
- }
- void Client::on_sendButton_clicked()
- {
- ui->chatwin->setText(ui->msg->text());
- }
- void Client::ioLoop()
- {
- int n, bytes_to_read;
- int sd, port;
- struct hostent *hp;
- struct sockaddr_in server;
- char *host, *bp, rbuf[BUFLEN], sbuf[BUFLEN], **pptr;
- char str[16];
- bool forkFlag = true;
- char usrName[USRSIZE];
- char temp[BUFLEN];
- char closeChat[] = "--close";
- char localhost[] = "127.0.0.1";
- pid_t childpid;
- childpid = fork();
- if(childpid > 0){
- /*switch(argc)
- {
- case 1:
- host = localhost;
- port = SERVER_TCP_PORT;
- break;
- case 2:
- host = argv[1]; // Host name
- port = SERVER_TCP_PORT;
- break;
- case 3:
- host = argv[1];
- port = atoi(argv[2]); // User specified port
- break;
- default:
- fprintf(stderr, "Usage: %s host [port]\n", argv[0]);
- exit(1);
- }*/
- // Create the socket
- if ((sd = socket(AF_INET, SOCK_STREAM, 0)) == -1)
- {
- perror("Cannot create socket");
- exit(1);
- }
- bzero((char *)&server, sizeof(struct sockaddr_in));
- server.sin_family = AF_INET;
- server.sin_port = htons(port);
- if ((hp = gethostbyname(host)) == NULL)
- {
- fprintf(stderr, "Unknown server address\n");
- exit(1);
- }
- bcopy(hp->h_addr, (char *)&server.sin_addr, hp->h_length);
- printf("Enter a username: ");
- //fgets (usrName, sizeof(usrName), stdin);
- for(int k = 0; k < USRSIZE; k++)
- {
- if(usrName[k] == '\n')
- usrName[k] = '\0';
- }
- strcat(usrName, ": ");
- // Connecting to the server
- if (connect (sd, (struct sockaddr *)&server, sizeof(server)) == -1)
- {
- fprintf(stderr, "Can't connect to server\n");
- perror("connect");
- exit(1);
- }
- printf("Connected: Server Name: %s\n", hp->h_name);
- pptr = hp->h_addr_list;
- printf("\t\tIP Address: %s\n", inet_ntop(hp->h_addrtype, *pptr, str, sizeof(str)));
- while(true){
- printf(usrName);
- //gets(sbuf); // get user's text
- //fgets (sbuf, BUFLEN - USRSIZE, stdin);
- if(strcmp(sbuf, closeChat) != 0)
- {
- strcpy(temp, usrName);
- strcat(temp, sbuf);
- strcpy(sbuf, temp);
- }
- else
- {
- break;
- }
- // Transmit data through the socket
- send (sd, sbuf, BUFLEN, 0);
- if(forkFlag)
- {
- forkFlag = false;
- if(fork())
- {
- while(true)
- {
- //printf("Receive:\n");
- bp = rbuf;
- bytes_to_read = BUFLEN;
- // client makes repeated calls to recv until no more data is expected to arrive.
- n = 0;
- while ((n = recv (sd, bp, bytes_to_read, 0)) < BUFLEN)
- {
- bp += n;
- bytes_to_read -= n;
- }
- printf ("%s\n", rbuf);
- }
- }
- }
- }
- fflush(stdout);
- close (sd);
- }
- }
Re: Untitled
By Sharp Leopard, 11 Years ago, written in Plain Text, viewed 784 times.
This paste is a reply to Untitled by Ungracious Ostrich
URL http://pb.stoleyour.com/view/08f4e48f
Embed
Download Paste or View Raw — Expand paste to full width of browser