I just want to share this function


Login or Register for Dates, Times and to Reply

 
Thread Tools Search this Thread
Top Forums Programming I just want to share this function
# 1  
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  
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  
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  
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  
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  
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  
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 for Dates, Times and to Reply

Previous Thread | Next Thread
Thread Tools Search this Thread
Search this Thread:
Advanced Search

Test Your Knowledge in Computers #420
Difficulty: Medium
JavaScript supports much of the structured programming syntax from C (e.g., if statements, while loops, switch statements, do while loops, etc.).
True or False?

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

Featured Tech Videos