LinuxQuestions.org
Share your knowledge at the LQ Wiki.
Go Back   LinuxQuestions.org > Forums > Non-*NIX Forums > Programming
User Name
Password
Programming This forum is for all programming questions.
The question does not have to be directly related to Linux and any language is fair game.

Notices

Reply
 
Search this Thread
Old 10-23-2008, 10:09 PM   #1
rahb20
LQ Newbie
 
Registered: Sep 2008
Posts: 6

Rep: Reputation: 0
how to send custom frame in socket programming


hi dudes !

I want to send a frame from client/server and then makes some checks on the frame type. can some body tell me how to send it.

frame will contain 3 things: type, length, and data

i created a structure, place some data in the structure but the problem is how to send this structure. will its values be accessed on the client and through which variable. will i have to create another instance of the structure in client or what ?

i have also to make check on type field, that if this type of frame then do this work and if this type then do that.


Help is needed from the programmers to please mention the method and little code example will be appreciated.

thanks
 
Old 10-24-2008, 12:29 AM   #2
ta0kira
Senior Member
 
Registered: Sep 2004
Distribution: FreeBSD 9.1, Kubuntu 12.10
Posts: 3,078

Rep: Reputation: Disabled
Have you looked into datagram sockets? You should take a look at info libc and find the section on sockets. As far as transmitting structures: they have to be 100% self-contained, i.e. no pointers, otherwise the receiving end will be looking for the actual data within its own memory space. You also might run into endian-ness or register size problems if you're using two different architectures. That's a lot to take into account, so I'd consider sending text, e.g. XML. Of course, I don't know if that will suit your purpose.
ta0kira

PS Do you mean a frame "proper"? That is at the kernel level, which is generally more work than it's worth unless you're inventing a new protocol, such as a replacement for TCP or UDP. I can't help you with that! Take a look at less /etc/services; I doubt you'll find many that aren't either!

PPS The sending and receiving setup takes 10+ lines on either end; not just a single method. It's a lot of work if you've never dealt with it!

P3S I've been assuming C/C++, but that's because people generally specify a language if it isn't one of those when asking this type of question. I'm also assuming *nix, but that isn't a requirement of the forum.

Last edited by ta0kira; 10-24-2008 at 12:44 AM.
 
Old 10-24-2008, 05:29 AM   #3
theNbomr
LQ 5k Club
 
Registered: Aug 2005
Distribution: OpenSuse, Fedora, Redhat, Debian
Posts: 5,395
Blog Entries: 2

Rep: Reputation: 903Reputation: 903Reputation: 903Reputation: 903Reputation: 903Reputation: 903Reputation: 903Reputation: 903
if you are trying to send & receive non-ip frames, it can be done using raw sockets. For a starter,
Code:
man packet
man 7 raw
man socket
Raw frames support requires root privileges.
--- rod
 
Old 10-24-2008, 08:13 AM   #4
rahb20
LQ Newbie
 
Registered: Sep 2008
Posts: 6

Original Poster
Rep: Reputation: 0
i want to establish some client/server communication in C
the connection was established sending a welcome message from the server to the client.
now the client would like to request for some file from the server.
the frame would contain 3 fields, one is type, 2nd is length and 3rd is payload which in this case would be file name.

now the problem is how to send all these three information using a single structure and then how i will display them on the server, that the client has requested for this file, its size is this.
 
Old 10-24-2008, 09:56 PM   #5
dwhitney67
Senior Member
 
Registered: Jun 2006
Location: Maryland
Distribution: Kubuntu, Fedora, RHEL
Posts: 1,522

Rep: Reputation: 332Reputation: 332Reputation: 332Reputation: 332
I don't think a structure is really necessary in your situation. Concerning the data you want to send to the server, consider packing it into a char buffer.


For example:
PHP Code:
...

int    type      1;
char*  filename  "/etc/hosts";
size_t frameSize sizeof(type) + sizeof(frameSize) + strlen(filename);

// Pack info into buffer...
char buf[1024] = {0};

memcpy(buf, &frameSizesizeof(frameSize));
memcpy(buf sizeof(frameSize), &typesizeof(type));
memcpy(buf sizeof(frameSize) + sizeof(type), filenamestrlen(filename));

// Send buf to server...
send(sdbufframeSize0);

... 
You may have to test the code above to ensure that it is syntactically correct. I coded it just now, from memory, and I have not tested it.

I always compile C code with the -std=gnu99 option.

Last edited by dwhitney67; 10-24-2008 at 10:07 PM.
 
  


Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is Off
HTML code is Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Frame Buffer Programming - Need Documentation qwijibow Programming 3 08-07-2012 02:29 PM
3Com 3c905 - Problems trying to send a frame in my own kernel module gambuzo Linux - Networking 0 05-06-2008 07:30 AM
recv() and send() in socket lrios Programming 5 04-23-2008 11:32 AM
Socket Programming: SMTP program to send email through Unix WinX187 Programming 1 05-12-2007 06:35 AM


All times are GMT -5. The time now is 01:36 PM.

Main Menu
My LQ
Write for LQ
LinuxQuestions.org is looking for people interested in writing Editorials, Articles, Reviews, and more. If you'd like to contribute content, let us know.
Main Menu
Syndicate
RSS1  Latest Threads
RSS1  LQ News
Twitter: @linuxquestions
identi.ca: @linuxquestions
Facebook: linuxquestions Google+: linuxquestions
Open Source Consulting | Domain Registration