I just want to share this function


 
Thread Tools Search this Thread
Top Forums Programming I just want to share this function
# 1  
Old 05-05-2012
I just want to share this function

If you receive data from a remote host you might like this. I just used it to find out what data the recv function terminates strings with.

Code:
void dump(const unsigned char *data_buffer, const unsigned int length)
{
    unsigned char byte;
    unsigned int i, j;
    for(i=0; i < length; i++)
    {
        byte = data_buffer[i];
        printf("%02x ", data_buffer[i]);      // Display byte in hex.
        if(((i%16)==15) || (i==length-1))
        {
            for(j=0; j < 15-(i%16); j++)
            {
                printf("   ");
            }
            printf("| ");
            for(j=(i-(i%16)); j <= i; j++)
            {   // Display printable byte from line.
                byte = data_buffer[j];
                if((byte > 31) && (byte < 127)) // Outside printable char range
                {
                    printf("%c", byte);
                }
                else
                {
                    printf(".");
                }
            }
            printf("\r\n");           // End of the dump line (each line is 16 bytes)
        }
    }
    printf("\r\n");
}

# 2  
Old 05-06-2012
The recv() function doesn't "terminate" anything. It gives you the bytes the other end sent you, in the same order they were sent, absolutely raw. Nothing more -- nothing less. Understanding the organization of the data it gives you means understanding what the other end is sending.

You got \n's because they sent \n's. That's how you define an 'end of line' in text. They might as easily have used NULLs, or had no terminators at all.

Last edited by Corona688; 05-06-2012 at 02:28 PM..
# 3  
Old 05-06-2012
Yea I figured that out with dump. Does recv always receive "\r\n" at the end of data or are there special cases where it does not?
# 4  
Old 05-06-2012
The socket doesn't alter the data which goes through it at all. It doesn't even add a terminator for you. It just puts the raw data in the buffer you told it to, and tells you how many bytes you got.

If you were sent a \r\n, you receive an \r\n.

If you weren't sent an \r\n, you don't receive an \r\n.

The data you're dealing is lines of ASCII text from a potentially non-UNIX source, which is why you're getting \r\n. It's part of the data itself.
# 5  
Old 05-06-2012
is it possable to send data to me without a "\r\n" trailer? If so how and how should I handle special cases like that in my loop?
# 6  
Old 05-06-2012
It's entirely possible to send data in absolutely any way you want. It's completely raw. You can cram a .bmp through there as easily as you can a line of text.

How to handle those cases depends entirely on what's being sent.

Since you're writing a text chat-server, it can be pretty expected and demanded that your clients send text. If they don't, they're not playing the same game you are...
# 7  
Old 05-06-2012
Ok so please answer this, if receive is sent data then "\r\n" can be sent without "\r\n" if the sender sees to it, and "\r\n" isn't from gcc ending receives with "\r\n" but "\r\n" is from the actual client sending data. or does my computer receive data and add "\r\n"?
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Function - Make your function return an exit status

Hi All, Good Day, seeking for your assistance on how to not perform my 2nd, 3rd,4th etc.. function if my 1st function is in else condition. #Body function1() { if then echo "exist" else echo "not exist" } #if not exist in function1 my all other function will not proceed.... (4 Replies)
Discussion started by: meister29
4 Replies

2. Shell Programming and Scripting

How to pass variable from one function to another function?

updateEnvironmentField() { linewithoutquotes=`echo $LINE | tr -d '"'` b() } I want to pass variable named $linewithoutquotes to another method called b(), which is called from updateEnvironmentField() method. How to do the above requirement with shell script (1 Reply)
Discussion started by: pottic
1 Replies

3. Shell Programming and Scripting

Need help on awk for printing the function name inside each function

Hi, I am having script which contains many functions. Need to print each function name at the starting of the function. Like below, functionname() { echo "functionname" commands.... } I've tried like below, func=`grep "()" scriptname | cut -d "(" -f1` for i in $func do nawk -v... (4 Replies)
Discussion started by: Sumanthsv
4 Replies

4. Shell Programming and Scripting

Will files, creaetd in one function of the same script will be recognized in another function?

Dear All. I have a script, which process files one by one. In the script I have two functions. one sftp files to different server the other from existing file create file with different name. My question is: Will sftp function recognize files names , which are created in another... (1 Reply)
Discussion started by: digioleg54
1 Replies

5. Shell Programming and Scripting

Help to Modify File Name in each function before calling another function.

I have a script which does gunzip, zip and untar. Input to the script is file name and file directory (where file is located) I am reading the input parameters as follows: FILENAME=$1 FILEDIR=$2 I have created 3 functions that are as follows: 1) gunzip file 2) unzip file... (2 Replies)
Discussion started by: pinnacle
2 Replies

6. Shell Programming and Scripting

Help with data reformat if share share content

Input data: read1_data1 read1_data1 read2_data1 read3_data1 read4_data1 read4_data1 read4_data1 read5_data1 . . Desired output result: read1_data1 read1_data2 read2_data1 read3_data1 read4_data1 (3 Replies)
Discussion started by: perl_beginner
3 Replies

7. Programming

How to step in one function after the function be executed in gdb?

In gdb, I can call one function with command "call", but how can I step in the function? I don't want to restart the program, but the function had been executed, gdb will execute next statement, and I don't know how to recall the function. (4 Replies)
Discussion started by: 915086731
4 Replies

8. Shell Programming and Scripting

SHELL SCRIPT Function Calling Another Function Please Help...

This is my function which is creating three variables based on counter & writing these variable to database by calling another function writeRecord but only one record is getting wrote in DB.... Please advise ASAP...:confused: function InsertFtg { FTGSTR="" echo "Saurabh is GREAT $#" let... (2 Replies)
Discussion started by: omkar.sonawane
2 Replies

9. Shell Programming and Scripting

Return a value from called function to the calling function

I have two scripts. script1.sh looks -------------------------------- #!/bin/bash display() { echo "Welcome to Unix" } display ----------------------------- Script2.sh #!/bin/bash sh script1.sh //simply calling script1.sh ------------------------------ (1 Reply)
Discussion started by: mvictorvijayan
1 Replies

10. Shell Programming and Scripting

Passing global variable to a function which is called by another function

Hi , I have three funcions f1, f2 and f3 . f1 calls f2 and f2 calls f3 . I have a global variable "period" which i want to pass to f3 . Can i pass the variable directly in the definition of f3 ? Pls help . sars (4 Replies)
Discussion started by: sars
4 Replies
Login or Register to Ask a Question