LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   socket programming problem (https://www.linuxquestions.org/questions/programming-9/socket-programming-problem-48526/)

bgraur 03-06-2003 02:57 AM

socket programming problem
 
Hello!
I made a class which should handle tcp comunication over a network between 2 apps. If I use this class to send data (at greater intervals of time) it works just fine. If I try to send a file's content(line by line) over the network the receiving application( which uses the same class for receiveing) seems to get only the first data message from the other end.
I tried waiting before transmission with select( n, NULL, &writefdset, NULL, &tv ) in a loop and before receive with select(n, &readfdset, NULL, NULL, &tv) in a loop but it doesn't seem to work.
For sending data I use send() and for receiving recv().
If you have any ideeas please help me!

Hko 03-06-2003 03:56 PM

I don't know send() and recv() but it sounds like a "one-message-function".
Maybe it helps if you use the more general way of transmitting data through a socket with read() and write().

Simple example (from Wrox' "Beginning Linux programming").

The client side:
Code:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
    int sockfd;
    int len;
    struct sockaddr_in address;
    int result;
    char ch = 'A';
    sockfd = socket(AF_INET, SOCK_STREAM, 0);
    address.sin_family = AF_INET;
    address.sin_addr.s_addr = inet_addr("127.0.0.1");
    address.sin_port = 9734;
    len = sizeof(address);
    result = connect(sockfd, (struct sockaddr *)&address, len);

    if(result == -1) {
        perror("oops: client1");
        exit(1);
    }
    write(sockfd, &ch, 1);
    read(sockfd, &ch, 1);
    printf("char from server = %c\n", ch);
    close(sockfd);
    exit(0);
}

The server side:

Code:

#include <sys/types.h>
#include <sys/socket.h>
#include <stdio.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <unistd.h>

int main()
{
    int server_sockfd, client_sockfd;
    int server_len, client_len;
    struct sockaddr_in server_address;
    struct sockaddr_in client_address;
    server_sockfd = socket(AF_INET, SOCK_STREAM, 0);
    server_address.sin_family = AF_INET;
    server_address.sin_addr.s_addr = inet_addr("127.0.0.1");
    server_address.sin_port = 9734;
    server_len = sizeof(server_address);
    bind(server_sockfd, (struct sockaddr *)&server_address, server_len);
    listen(server_sockfd, 5);
    while(1) {
        char ch;

        printf("server waiting\n");
        client_sockfd = accept(server_sockfd,
            (struct sockaddr *)&client_address, &client_len);
        read(client_sockfd, &ch, 1);
        ch++;
        write(client_sockfd, &ch, 1);
        close(client_sockfd);
    }
}


karthikeyan 03-09-2003 09:05 AM

hai Bgraur

I hope hko answered your problem . I am very much interested in socket programming in linux.I hope we an contact each other for any doubts hereafter........

bye..


All times are GMT -5. The time now is 11:12 PM.