Friday, August 13, 2010

Keyboard shortcuts for Windows

 

Windows system key combinations

  • F1: Help
  • CTRL+ESC: Open Start menu
  • ALT+TAB: Switch between open programs
  • ALT+F4: Quit program
  • SHIFT+DELETE: Delete item permanently
  • Windows Logo+L: Lock the computer (without using CTRL+ALT+DELETE)

Windows program key combinations

  • CTRL+C: Copy
  • CTRL+X: Cut
  • CTRL+V: Paste
  • CTRL+Z: Undo
  • CTRL+B: Bold
  • CTRL+U: Underline
  • CTRL+I: Italic

Mouse click/keyboard modifier combinations for shell objects

  • SHIFT+right click: Displays a shortcut menu containing alternative commands
  • SHIFT+double click: Runs the alternate default command (the second item on the menu)
  • ALT+double click: Displays properties
  • SHIFT+DELETE: Deletes an item immediately without placing it in the Recycle Bin

General keyboard-only commands

  • F1: Starts Windows Help
  • F10: Activates menu bar options
  • SHIFT+F10 Opens a shortcut menu for the selected item (this is the same as right-clicking an object
  • CTRL+ESC: Opens the Start menu (use the ARROW keys to select an item)
  • CTRL+ESC or ESC: Selects the Start button (press TAB to select the taskbar, or press SHIFT+F10 for a context menu)
  • CTRL+SHIFT+ESC: Opens Windows Task Manager
  • ALT+DOWN ARROW: Opens a drop-down list box
  • ALT+TAB: Switch to another running program (hold down the ALT key and then press the TAB key to view the task-switching window)
  • SHIFT: Press and hold down the SHIFT key while you insert a CD-ROM to bypass the automatic-run feature
  • ALT+SPACE: Displays the main window's System menu (from the System menu, you can restore, move, resize, minimize, maximize, or close the window)
  • ALT+- (ALT+hyphen): Displays the Multiple Document Interface (MDI) child window's System menu (from the MDI child window's System menu, you can restore, move, resize, minimize, maximize, or close the child window)
  • CTRL+TAB: Switch to the next child window of a Multiple Document Interface (MDI) program
  • ALT+underlined letter in menu: Opens the menu
  • ALT+F4: Closes the current window
  • CTRL+F4: Closes the current Multiple Document Interface (MDI) window
  • ALT+F6: Switch between multiple windows in the same program (for example, when the Notepad Find dialog box is displayed, ALT+F6 switches between the Find dialog box and the main Notepad window)

Shell objects and general folder/Windows Explorer shortcuts

For a selected object:
  • F2: Rename object
  • F3: Find all files
  • CTRL+X: Cut
  • CTRL+C: Copy
  • CTRL+V: Paste
  • SHIFT+DELETE: Delete selection immediately, without moving the item to the Recycle Bin
  • ALT+ENTER: Open the properties for the selected object

To copy a file

Press and hold down the CTRL key while you drag the file to another folder.

To create a shortcut

Press and hold down CTRL+SHIFT while you drag a file to the desktop or a folder.

General folder/shortcut control

  • F4: Selects the Go To A Different Folder box and moves down the entries in the box (if the toolbar is active in Windows Explorer)
  • F5: Refreshes the current window.
  • F6: Moves among panes in Windows Explorer
  • CTRL+G: Opens the Go To Folder tool (in Windows 95 Windows Explorer only)
  • CTRL+Z: Undo the last command
  • CTRL+A: Select all the items in the current window
  • BACKSPACE: Switch to the parent folder
  • SHIFT+click+Close button: For folders, close the current folder plus all parent folders

Windows Explorer tree control

  • Numeric Keypad *: Expands everything under the current selection
  • Numeric Keypad +: Expands the current selection
  • Numeric Keypad -: Collapses the current selection.
  • RIGHT ARROW: Expands the current selection if it is not expanded, otherwise goes to the first child
  • LEFT ARROW: Collapses the current selection if it is expanded, otherwise goes to the parent

Properties control

  • CTRL+TAB/CTRL+SHIFT+TAB: Move through the property tabs

Accessibility shortcuts

  • Press SHIFT five times: Toggles StickyKeys on and off
  • Press down and hold the right SHIFT key for eight seconds: Toggles FilterKeys on and off
  • Press down and hold the NUM LOCK key for five seconds: Toggles ToggleKeys on and off
  • Left ALT+left SHIFT+NUM LOCK: Toggles MouseKeys on and off
  • Left ALT+left SHIFT+PRINT SCREEN: Toggles high contrast on and off

Microsoft Natural Keyboard keys

  • Windows Logo: Start menu
  • Windows Logo+R: Run dialog box
  • Windows Logo+M: Minimize all
  • SHIFT+Windows Logo+M: Undo minimize all
  • Windows Logo+F1: Help
  • Windows Logo+E: Windows Explorer
  • Windows Logo+F: Find files or folders
  • Windows Logo+D: Minimizes all open windows and displays the desktop
  • CTRL+Windows Logo+F: Find computer
  • CTRL+Windows Logo+TAB: Moves focus from Start, to the Quick Launch toolbar, to the system tray (use RIGHT ARROW or LEFT ARROW to move focus to items on the Quick Launch toolbar and the system tray)
  • Windows Logo+TAB: Cycle through taskbar buttons
  • Windows Logo+Break: System Properties dialog box
  • Application key: Displays a shortcut menu for the selected item

Microsoft Natural Keyboard with IntelliType software installed

  • Windows Logo+L: Log off Windows
  • Windows Logo+P: Starts Print Manager
  • Windows Logo+C: Opens Control Panel
  • Windows Logo+V: Starts Clipboard
  • Windows Logo+K: Opens Keyboard Properties dialog box
  • Windows Logo+I: Opens Mouse Properties dialog box
  • Windows Logo+A: Starts Accessibility Options (if installed)
  • Windows Logo+SPACEBAR: Displays the list of Microsoft IntelliType shortcut keys
  • Windows Logo+S: Toggles CAPS LOCK on and off

Dialog box keyboard commands

  • TAB: Move to the next control in the dialog box
  • SHIFT+TAB: Move to the previous control in the dialog box
  • SPACEBAR: If the current control is a button, this clicks the button. If the current control is a check box, this toggles the check box. If the current control is an option, this selects the option.
  • ENTER: Equivalent to clicking the selected button (the button with the outline)
  • ESC: Equivalent to clicking the Cancel button
  • ALT+underlined letter in dialog box item: Move to the corresponding item
Note This is a "FAST PUBLISH" article created directly from within the Microsoft support organization. The information contained herein is provided as-is in response to emerging issues. As a result of the speed in making it available, the materials may include typographical errors and may be revised at any time without notice.

APPLIES TO
  • Windows Server 2008 Datacenter
  • Windows Server 2008 Enterprise
  • Windows Server 2008 Standard
  • Microsoft Windows Server 2003, Datacenter Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise x64 Edition
  • Microsoft Windows Server 2003, Enterprise Edition (32-bit x86)
  • Microsoft Windows Server 2003, Enterprise Edition for Itanium-based Systems
  • Microsoft Windows Server 2003, Standard x64 Edition
  • Microsoft Windows Server 2003, Standard Edition (32-bit x86)
  • Microsoft Windows 2000 Server
  • Microsoft Windows 95
  • Windows Vista Business
  • Windows Vista Enterprise
  • Windows Vista Home Basic
  • Windows Vista Home Premium
  • Windows Vista Starter
  • Windows Vista Ultimate
  • Microsoft Windows XP Home Edition
  • Microsoft Windows XP Professional
  • Microsoft Windows XP Starter Edition
  • Microsoft Windows XP Tablet PC Edition
Keywords: 
kbpubtypekc kbenablemove kbenablesight kbenv kbfaq kbinfo KB126449

Download Hindi Mp3



Download Hindi Mp3 music Music for free, Hindi remixes, pop, movies, film songs in mp3 format.

  • Hindi Mp3 music
  • Hindi remixes
  • film songs in mp3 format
  • Bollywood Movies
  • Lyrics 
  • Translations
 www.bollyfm.net

Usefull shorkut keys

Open My Computer ...











Type ---         Windows + E

Back to Desktop .....












Type ------  windows + D

Thursday, August 12, 2010

Free Online Antivirus Scanners


If you suspect that your computer might have a virus and you can still access the web, you can use a free online antivirus scanner to identify and eliminate any viruses that have infected your computer. An online antivirus scanner will not be as fast as an antivirus utility that is installed on your computer. An installed antivirus utility can stay active at all times and scan files as you open them. But if you don't have an installed antivirus utility, or if you let your subscription expire, an online antivirus scanner may be your only choice.
To use an online antivirus scanner, you'll need Internet Explorer version 5.0 or higher installed on your computer. In fact, one way you can avoid getting a virus in the first place is to update your browser to the latest version. You should also make sure you have all the latest updates from Microsoft's Windows Update website.
Note: In my experience, Microsoft's update site doesn't work too well with a dial-up connection. They have the bandwidth is pinched off tight and it stalls frequently.
The first time you use an online antivirus scanner website you'll be required to download an ActiveX control. Make sure your browser is configured to accept ActiveX controls.
Symantec Security Response
Click on the "Check for security risks" icon, then click on the "Virus Detection" link. Symantec also provides a "Security Scan", which checks whether your computer is configured to be safe from hackers, viruses, and other attacks.
Trend Micro
This Tokyo company has been in the online antivirus scanner business longer than anyone else. Click on the "Personal" tab (unless you're an Enterprise). Under the heading "VIRUS ALERT", click on the link "Free Online Scan".
Panda Software
Panda Software is another company that's been in the antivirus business for a long time with computer installed utilities. Click on "Online virus check" or on the Panda ActiveScan icon. A new browser window will open with Panda ActiveScan.
RAV AntiVirus
This company's antivirus technology was acquired by Microsoft in 2003. Click on "Scan online" in the menu on the left side. The first time you use RAV AntiVirus you must download and install over 1MB of required files. On subsequent visits to the site, only the updated files (up to 100Kb, depending on how often you use the service) will need to be downloaded.
Bitdefender
This Bucharest, ROMANIA based company has Macromedia Flash on every page. If you use dial-up, that will probably bog down your connection enough to make this site useless. Do they think someone who is seeking antivirus scanning would want to download Macromedia Flash player? Macromedia Flash is used by bored webpage designers who have a lot of time on their hands and a lot of money to waste. Unless no other online antivirus scanner works for you, I would recommend avoiding this site until they lose the Flash.

Troubleshoot Windows XP with Event Viewer

Anything noteworthy that happens in Windows is referred to as an "event" and is recorded in an "event log". Windows actually creates three logs, the Application log stores events related to applications. The Security log stores events related to security related events, for example user logons. The System log stores Windows operating system events. Most people ignore these logs; however, they can be very useful for troubleshooting purposes.
- Some applications create their own separate event log which is displayed in Event Viewer along with Windows standard Application, Security and System event logs. Sometimes an aplication will leave its event log behind after you uninstall it. You can remove the log by removing its subkey from the key:
Also remove the associated file from the folder:
\Windows\system32\config
It will have an .evt extension. But never remove AppEvent.evt, SecEvent.evt, or SysEvent.evt, the Application, Security and System event logs.
To view an event log, in Control Panel select the Administrative Tools. In the Administrative Tools window, select the Event Viewer. You can also open Event Viewer by selecting Start | Run and typing eventvwr.msc in the Run dialog box.
Event Viewer
There are three types of events, an Information event records that a task was performed successfully or that a service had a change of status. Information events are usually nothing to be concerned about. A Warning event records that a noncritical error occurred. If your system is recording a high number of Warning events from a single source, you might want to investigate the cause.
An Error event records that a critical error has occurred. You might want to investigate an Error event before it becomes a more serious problem. To view the details of an event, double-click on the event in the list. The Event Properties dialog box will open. The Event Properties dialog box Description section will display a description of the event, and maybe a link to a source of more information about that type of event.
Event Properties dialog box
- Note the memory dump data at the bottom of the dialog box. This information would only be useful to Microsoft's programmers in India.

How to Use Event Description Information
The information provided by the Event Properties dialog box should point you towards the source of the problem. Use your regular troubleshooting tools, resources, and techniques to solve the problem.
If the Event Properties dialog box includes a link to Micosoft's website (and your computer is connected to the Internet), click on the link. This will execute the Microsoft Help and Support Center which will retrieve information related to the error from Microsoft's web site. This information may include instructions about how to solve the problem, along with links to relevant information on Microsoft's web site.
You can also visit the Microsoft Knowledge Base where you can search for information by typing the error description or a question into the search box. You can also type the error description into a general search engine to perform a general web search.
When to Use Event Viewer
Use the Event Viewer when an error occurs while using your computer. Windows will generate an Error event log proving details about the error. You'll want to review the event log immediately after the error.
Use the Event Viewer before and after you make a major change to the system. Inspect the event logs before installing software, hardware, or making a major configuration change. Then, after a short interval, view the event logs again to see if the change is causing warning or error events.
Review the event logs periodically to learn about problems that may not be apparent from the operation of the computer, but can become serious if not attended to.
Set Event Log Options
You can set several Event Log options to aid in troubleshooting and improve Windows performance. In the left pane of Event Viewer right-click on one of the event logs and select Properties in the popup menu. The log's Properties dialog box will appear.
Event Viewer Filter tab
On the [Filter] tab you can configure the Event Viewer to filter out specific event types from specific Sources. Then you won't need to scroll through a long list of events to view the events caused by the source you are investigating. For example, you might to filter out all Information and Warning event types from all sources in order to focus on only the Error type events.
- After you fix the problem causing Error events, use the filter to select and delete all related events so when you check the log later you won't be confused. You can also select to clear all events.

Clear all events
The default size of a log is 512 KB. There is no reason to maintain such large logs. In the log's Properties dialog box, on the [General] tab, in the Log size section, set the Maximum log size to 64 KB.
Set the Maximum log size

In order to maintain the log size at 64 KB, when a new event occurs, the oldest event will be overwritten. An alternative configuration would be to leave the log size at 512 KB, but set the log to overwrite events older than a certain date. You can also configure it to allow you to clear events manually.

Security Log
Each time you logon or logoff the system, a Security event is created. In a corporate network environment, system administrators will regularly analyze the Security log for signs of hacker activity. There are third party applications that can perform this analysis for them.

- You might find it interesting to know that it's not just user logon that create Security events. Software applications and even Windows services need permission to access a systems resources.
Anything noteworthy that happens in Windows is recorded in an "event log". Most people ignore these logs; however, they can be very useful for troubleshooting purposes.

Build your own computer


Introduction

In this tutorial I will try an teach you how to successfully build your own computer! There are many benefits to building your own computer.
  1. You get hand's on experience learning how a computer works
  2. Its a hell of alot less expensive then buying one from a retailer
  3. Its a hell of alot more reliable than buying one from a retailer being that you hand select QUALITY parts and put it togethor yourself.
  4. You can do your own tech support no more relying on stupid Best Buy Tech's that don't know the difference between their ass and a hard disk jumper (don't worry I'll tell you what those are later)
Section #1 (What Your Going To Need)

Here we will discuss a list of the parts you need and the best place to purchase them. If you want the best
prices on computer hardware you will definitly want to look online. Unfortunatly (and for some of you very fortunatly
if you know what I mean) this requires the use of a credit card. Below is a general list of the devices you will
need...
  1. A Computer Case (Something To Put All The Computer Parts Togethor In)
    • Should only run you about 50 dollars
    • Beware the cheap ones with cheap power supplies they will die in a year
  2. A Mother Board (Everything Will Be Plugged Into The Mother Board)
  3. A Floppy Drive and a CDROM (Should Be Obvious)
  4. A Hard Disk (Come In Many Different Flavors and Quality Levels, Stores All The Information In Your Computer)
  5. A Video Card (Cheap Stuff, Its What Your Monitor Plugs Into)
  6. IDE Controller Ribbon
  7. Miscellaneous Accessories
Next we'll take a look at many of the different options you have when buying these pieces of equipment. Your choice
may vary depending on which Operating Systems you plan on running.
Section #2 (Which Brand And Model Should I Buy?)
We'll lets start with your computer case and move all the way down to Miscellaneous Accessories..
1. Computer Case
You will most certainly need an ATX style case with a quality power supply. How do you tell? Well if the case
is only 15-20 bucks theres a pretty good chance its a crappy power supply.
2. A Mother Board
I suggest a quality ASUS (ATX style to match your computer case) mother board its up to you ask your friends.
I've had bad experiences personally with FIC
mother boards.
3. A Floppy Drive and CDROM

Pretty inexpensive stuff, i'd suggest a Sony Floppy drive and a generic CDROM. Doesn't make too much a difference if your
concerned about getting the best price.
4. Hard Disks

Gets alittle tricky. If you want reliability, high speed transfers, and are willing to run Windows I suggest a Western Digital
or a Seagate ULTRA DMA-66. If your not to concerned with speed and want to run a server with Unix i'd go with a Fujitsu or
a Western Digital. Their farely inexpensive but only transfer in 33 megabit bursts as apposed to the DMA-66 which transfer
in 33 megabit bursts. I don't believe Unix currently supports ULTRA DMA-66, but don't quote me on that. Now there's an even faster
transfer rate available via SCSI Hard Disk Controllers, but i'm not about to go into setting up SCSI controllers in this tutorial.
For now we will stick with IDE Hard Disk controllers.
5. Video Cards

Video cards are cheap and if your not a gamer a plain ole gener Cirrus Logic or STB video card will do fine.
6. IDE Controller Ribbon

You'll need 2 different kinds of IDE Ribbon 2 40 pins for your CDROM and Hard Disk and Another with less pins for your floppy.
You can buy these at any local computer store or order them off the web.
7. Miscellaneous Stuff

You may be interested in adding a sound card, ethernet card, and/or 3DFX card to your system. These are relatively easy to do and
I will explain how to add card's to your mother board later.
Section #3 (Where do I buy all this crap!?)

Well if your looking for the best prices online for computer hardware (and this is my unbiast opinion) i'd suggest going to
http://www.pricewatch.com again ask your friends maybe they know a better place. Pricewatch.com researchs the best prices
on computer hardware.
Section #4 (Lets Assemble!)

This next part is very important so read carefully...
  1. First things first get yourself a clean desk to work on.
  2. Place your ATX stlye computer case on the desk and slide/lift the top off. Inside should be a bunch of wires coming out
    of the power supply in the back and a bunch of wires coming out near the face of the box.
  3. The next thing your going to want to do is place your mother board inside the case and fasten it in. Their might be
    metal coverings covering the holes in the computer case were the parralel ports and serial ports on the mother board
    should poke through, go ahead and poke those out with a screw drive so you can fit the mother board in snuggly. Every
    Case fastens mother boards in different ways. Some use plastic pegs, some use metal screws. It will hopefully be obvious
    which you have to use.
  4. #4 Once the mother board is mounted properly you will need to fasten the floppy drive, and cdrom into the computer case.
    All computer cases store floppy drives differently there maybe a slide out container that you screw them into. You'll
    have to make sure that the the floppy drive is right side up (duh!) and that the pins are facing towards the back of the
    computer. Installing the CDROM is pretty much the same in all computer cases. Some mounting rails should have come
    with your mother board. You need to fasten those to the sides of the CDROM and you should be able to slide it right in
    to one of the top bays.
  5. Insert your Video Card. There are presently about 3 differnet forms of slots on your mother board. PCI, ISA, and AGP.
    Video Cards are presently made for all 3 of them. AGP stands for "Accelrated Graphics Port" Video Cards made for this
    slot are generally more high tech/performance. PCI's work and so do ISA (Althoug ISA is more Old School). Gee how
    do I tell the difference? Well AGP slots more than likely is the only small, brown, slot on your mother board. PCI
    you probably have the most of these their white and little longer than AGP. ISA, these are longggg and black, ugly.
    Insert your Video Card and snug it in there firmly. Don't force it (duh).
  6. Time for that evil Hard Disk installation. We'll Hit hooking up the power supplies and Installing the Hard Disk at the
    same time just for fun. Insert the Hard Disk In a very much similar way to the way you inserted the floppy disk. But
    Before you do make sure that the jumper settings are correct on the back of Har Disk. Most hard disks are shipped in
    single mode, but if you want to run multiple hard disks (which we won't discuss) you need to set the jumpers differently.
    Jumpers are little metal prongs connected with little jumpers that complete a connection. You figure it out. Anyway
    you got your hard disk in now its time to hook up the power supplies. The hard disk and the CDROM have similar power supp
    lies. 3 or 4 prong. Hook those funny looking cords coming out of the back of the power supply into your CDROM and Hard
    Disk. Theres a smaller one that hooks into your floppy it should be obvious. Theres a big power supply (the biggest one
    in the lot usually made of white plastic) It fits into a slot on your mother board, it is the main power supply to your
    mother board. Its kind of tricky to get in so be careful.
  7. Now that you have your Power Supplies hooked up you'll need to connect your Periphrials to your Mother Board. Use the IDE
    Controller Ribbon I know you all have. Hey one end goes to your CDROM (make sure the red line on the ribbon "pin 1" is
    matched up with the first pin on the back of your CDROM) and the other end goes to your mother board (same deal). The
    same goes for your hard disk and yoru floppy. Figure it out its not that difficult. You'll know you did something wrong
    when you get a floppy disk fail on boot.
  8. Finishing touches. Don't forget to connect those nasty wires coming out from behind the face of your computer case to
    your mother board. They control the on, off, reset, hard disk activity, and power switch. Every mother board is different
    so i hope you have a manual with your mother board. Most specify with 2 or 3 character paraphrases that make no sense.
    For Example "PWR SWT" = Power Switch "RST SWT" = Reset Switch. Or even more vague than that.
Section #5 (Testing 1, 2, 3)

Ok your ready to give it a whirl, you'll need to get in your system bios. The "DEL" key should usually get you in.
Get it to autodetect your hard disk. Accept the Setting and Save your Configurations. Install Your OS and your ready to go.
That easy!! Ha! you'll prolly have lots of trouble theres a million resources online to help you. Get to it.

BASIC C Socket Programming In Unix For Newbies


CONTENTS

=======================================

1. Introduction

2. Different types of Internet Sockets

3. Structures

4. Conversions

5. IP Addresses

6. Important Functions



   6.1. socket()

   6.2. bind()

   6.3. connect()

   6.4. listen()

   6.5. accept()

   6.6. send()

   6.7. recv()

   6.8. sendto()

   6.9. recvfrom()

   6.10. close()

   6.11. shutdown()

   6.12. gethostname()



7. Some words about DNS



8. A Stream Server Example



9. A Stream Client Example



10. Last Words



11. Copyright







1. INTRODUCTION

=======================================



Are you trying to learn c socket programming? Or do you think that it's hard stuff?

Well, then you must read this basic tutorial to get basic ideas and concepts and to start

to work with sockets. Don't expect to be a "socket programming master" after reading this

tutorial. You'll only be that if you practice and read a lot.







2. DIFFERENT TYPES OF INTERNET SOCKETS

=======================================



In the first place I must explain what a socket is. In a very simple way, a socket is a way

to talk to other computer. To be more precise, it's a way to talk to other computers using

standard Unix file descriptors. In Unix, every I/O actions are done by writing or reading

to a file descriptor. A file descriptor is just an integer associated with an open file and it

can be a network connection, a terminal, or something else.



About the different types of internet sockets, there are many types but I'll just describe two

of them - Stream Sockets (SOCK_STREAM) and Datagram Sockets (SOCK_DGRAM).



"And what are the differences between this two types?" you may ask. Here's the answer:



        Stream Sockets - they're error free; if you send through the stream socket three

             items "A,B,C", they will arrive in the same order - "A,B,C" ;

             they use TCP ("Transmission Control Protocol") - this protocol

             assures the items' order.

     

      Datagram Sockets - they use UDP ("User Datagram Protocol"); they're connectionless

             because you don't need to have an open connection as in Stream

             Sockets - you build a packet with the destination information and

             send it out.



A lot more could be explained here about this two kind of sockets, but I think this is enough

to get the basic concept of socket. Understanding what a socket is and this two types of

internet sockets is a good start, but you need to learn how to "work" with them. You'll learn

it in the next sections.





3. STRUCTURES

=======================================



The purpose of this section is not to teach you structures but to tell you how are they

used in C socket programming. If you don't know what a structure is, my advice is to read

a C Tutorial and learn it. For the moment, let's just say that a structure is a data type

that is an aggregate, that is, it contains other data types, which are grouped together into

a single user-defined type.



Structures are used in socket programming to hold information about the address.





The first structure is struct sockaddr that holds socket information.







    struct sockaddr{

        unsigned short  sa_family;    /* address family */

        char            sa_data[14];  /* 14 bytes of protocol address */

    };







But, there's another structure (struct sockaddr_in) that help you to reference to the socket's

elements.







    struct sockaddr_in {

        short int         sin_family;  /* Address family */

        unsigned short int   sin_port;      /* Port */

        struct in_addr         sin_addr;      /* Internet Address */

        unsigned char         sin_zero[8]; /* Same size as struct sockaddr */

    };







Note: sin_zero is set to all zeros with memset() or bzero() (See examples bellow).







The next structure is not very used but it is defined as an union.



As you can see in both examples bellow (Stream Client and Server Client) , when I declare for

example "client" to be of type sockaddr_in then I do client.sin_addr = (...)



Here's the structure anyway:





    struct in_addr {

        unsigned long s_addr;

    };







Finally, I think it's better talk about struct hostent. In the Stream Client Example, you can

see that I use this structure. This structure is used to get remote host information.



Here it is:





    struct hostent

    {

      char *h_name;                 /* Official name of host.  */

      char **h_aliases;             /* Alias list.  */

      int h_addrtype;               /* Host address type.  */

      int h_length;                 /* Length of address.  */

      char **h_addr_list;           /* List of addresses from name server.  */

    #define h_addr  h_addr_list[0]  /* Address, for backward compatibility.  */

    };



This structure is defined in header file netdb.h.





In the beginning, this structures will confuse you a lot, but after you start to write some

lines, and after seeing the examples, it will be easier for you understanding them. To see

how you can use them check the examples (section 8 and 9).







4. CONVERSIONS

=======================================



There are two types of byte ordering: most significant byte and least significant byte.

This former is called "Network Byte Order" and some machines store their numbers internally

in Network Byte Order.



There are two types you can convert: short and long.

Imagine you want to convert a long from Host Byte Order to Network Byte Order. What would you

do? There's a function called htonl() that would convert it =) The following functions are

used to convert :



    htons() -> "Host to Network Short"

    htonl()    -> "Host to Network Long"

    ntohs()    -> "Network to Host Short"

    ntohl() -> "Network to Host Long"



You must be thinking why do you need this. Well, when you finish reading this document, it will

all seems easier =) All you need is to read and a lot of practice =)



An important thing, is that sin_addr and sin_port (from struct sockaddr_in) must be in Network

Byte Order (you'll see in the examples the functions described here to convert and you'll start

to understand it).



5. IP ADRESSES

=======================================



In C, there are some functions that will help you manipulating IP addresses. We'll talk about

inet_addr() and inet_ntoa() functions.





    inet_addr() converts an IP address into an unsigned long. An example:

   

    (...)



    dest.sin_addr.s_addr = inet_addr("195.65.36.12");



    (...)



    /*Remember that this is if you've a struct dest of type sockaddr_in*/







    inet_ntoa() converts string IP addresses to long. An example:



    (...)



    char *IP;



    ip=inet_ntoa(dest.sin_addr);



    printf("Address is: %s\n",ip);



    (...)



Remember that inet_addr() returns the address in Network Byte Order - so you don't need to

call htonl().





6. IMPORTANT FUNCTIONS

=======================================



In this section I'll put the function' syntax, the header files you must include to call it,

and little comments. Besides the functions mentioned in this document, there are more, but

I decided to put only these ones here. Maybe I'll put them in a future version of this

document =) To see examples of these functions, you can check the stream client and stream

server source code (Sections 8 and 9)





  6.1. socket()

  =============

   

    #include

    #include



    int socket(int domain,int type,int protocol);





    Let's see the arguments:



        domain   -> you can set "AF_INET" (set AF_INET to use ARPA internet protocols)

                or "AF_UNIX" if you want to create sockets for inside comunication.

                Those two are the most used, but don't think that there are just

                  those. There are more I just don't mention them.

        type     -> here you put the kind of socket you want (Stream or Datagram)

                  If you want Stream Socket the type must be SOCK_STREAM

                  If you want Datagram Socket the type must be SOCK_DGRAM

        protocol -> you can just set protocol to 0





    socket() gives you a socket descriptor that you can use in later system calls or

    it gives you -1 on error (this is usefull for error checking routines).





  6.2. bind()

  ===========



    #include

    #include



    int bind(int fd, struct sockaddr *my_addr,int addrlen);



   

    Let's see the arguments:



        fd  -> is the socket file descriptor returned by socket() call

        my_addr -> is a pointer to struct sockaddr

        addrlen -> set it to sizeof(struct sockaddr)



    bind() is used when you care about your local port (usually when you use listen() )

    and its function is to associate a socket with a port (on your machine). It returns

    -1 on error.



    You can put your IP address and your port automatically:



        server.sin_port = 0;                /* bind() will choose a random port*/

        server.sin_addr.s_addr = INADDR_ANY;  /* puts server's IP automatically */





    An important aspect about ports and bind() is that all ports bellow 1024 are reserved.

    You can set a  port above 1024 and bellow 65535 (unless the ones being used by other

    programs).





  6.3. connect()

  ==============



    #include

    #include



    int connect(int fd, struct sockaddr *serv_addr, int addrlen);



    Let's see the arguments:



        fd    -> is the socket file descriptor returned by socket() call

        serv_addr -> is a pointer to struct sockaddr that contains destination IP

                 address and port

        addrlen   -> set it to sizeof(struct sockaddr)



    connect() is used to connect to an IP address on a defined port. It returns -1 on

    error.





  6.4. listen()

  =============



    #include

    #include



    int listen(int fd,int backlog);



    Let's see the arguments:



        fd  -> is the socket file descriptor returned by socket() call

        backlog -> is the number of allowed connections



    listen() is used if you're waiting for incoming connections, this is, if you want

    someone to connect to your machine. Before calling listen(), you must call bind()

    or you'll be listening on a random port =) After calling listen() you must call

    accept() in order to accept incoming connection. Resuming, the sequence of system calls

    is:



        1. socket()

        2. bind()

        3. listen()

        4. accept() /* In the next section I'll explain how to use accept() */



    As all functions above described, listen() returns -1 on error.





  6.5. accept()

  =============



    #include



    int accept(int fd, void *addr, int *addrlen);



    Let's see the arguments:



        fd  -> is the socket file descriptor returned by listen() call

        addr    -> is a pointer to struct sockaddr_in where you can determine which host

               is calling you from which port

        addrlen -> set it to sizeof(struct sockaddr_in) before its address is passed

               to accept()



   

    When someone is trying to connect to your computer, you must use accept() to get the

    connection. It's very simple to understand: you just get a connection if you accept =)

   



    Next, I'll give you a little example of accept() use because it's a little different

    from other functions.



    (...)



      sin_size=sizeof(struct sockaddr_in);

      if ((fd2 = accept(fd,(struct sockaddr *)&client,&sin_size))==-1){ /* calls accept() */

        printf("accept() error\n");

        exit(-1);

      }



    (...)



    From now on, fd2 will be used for add send() and recv() calls.





  6.6. send()

  ===========



   

    int send(int fd,const void *msg,int len,int flags);



    Let's see the arguments:



        fd -> is the socket descriptor where you want to send data to

        msg    -> is a pointer to the data you want to send

        len    -> is the length of the data you want to send (in bytes)

        flags  -> set it to 0





    This function is used to send data over stream sockets or CONNECTED datagram sockets.

    If you want to send data over UNCONNECTED datagram sockets you must use sendto().

   

    send() returns the number of bytes sent out and it will return -1 on error.





  6.7. recv()

  ===========





    int recv(int fd, void *buf, int len, unsigned int flags);



    Let's see the arguments:



        fd  -> is the socket descriptor to read from

        buf    -> is the buffer to read the information into

        len     -> is the maximum length of the buffer

        flags     -> set it to 0





    As I said above about send(), this function is used to send data over stream sockets or

    CONNECTED datagram sockets. If you want to send data over UNCONNECTED datagram sockets

    you must use recvfrom().



    recv() returns the number of bytes read into the buffer and it'll return -1 on error.





  6.8. sendto()

  =============



    int sendto(int fd,const void *msg, int len, unsigned int flags,

           const struct sockaddr *to, int tolen);



    Let's see the arguments:



        fd  -> the same as send()

        msg     -> the same as send()

        len    -> the same as send()

        flags    -> the same as send()

        to    -> is a pointer to struct sockaddr

        tolen    -> set it to sizeof(struct sockaddr)



    As you can see, sendto() is just like send(). It has only two more arguments : "to"

    and "tolen" =)



    sendto() is used for UNCONNECTED datagram sockets and it returns the number of bytes

    sent out and it will return -1 on error.





  6.9. recvfrom()

  ===============



    int recvfrom(int fd,void *buf, int len, unsigned int flags

             struct sockaddr *from, int *fromlen);



    Let's see the arguments:



        fd    -> the same as recv()

        buf    -> the same as recv()

        len    -> the same as recv()

        flags    -> the same as recv()

        from    -> is a pointer to struct sockaddr

        fromlen    -> is a pointer to a local int that should be initialised

               to sizeof(struct sockaddr)



    recvfrom() returns the number of bytes received and it'll return -1 on error.





  6.10. close()

  =============



    close(fd);



    close() is used to close the connection on your socket descriptor. If you call close(),

    it won't be no more writes or reads and if someone tries to read/write will receive an

    error.





  6.11. shutdown()

  ================



    int shutdown(int fd, int how);



    Let's see the arguments:



        fd    -> is the socket file descriptor you want to shutdown

        how    -> you put one of those numbers:

               

                    0 -> receives disallowed

                    1 -> sends disallowed

                    2 -> sends and receives disallowed



    When how is set to 2, it's the same thing as close().



    shutdown() returns 0 on success and -1 on error.





  6.12. gethostname()

  ===================



    #include



    int gethostname(char *hostname, size_t size);



    Let's see the arguments:



        hostname  -> is a pointer to an array that contains hostname

        size       -> length of the hostname array (in bytes)



   

    gethostname() is used to get the name of the local machine.







7. SOME WORDS ABOUT DNS

=======================================



I created this section, because I think you should know what DNS is. DNS stands for "Domain

Name Service" and basically, it's used to get IP addresses. For example, I need to know the

IP address of queima.ptlink.net and through DNS I'll get 212.13.37.13 .



This is important, because functions we saw above (like bind() and connect()) work with IP

addresses.



To see you how you can get queima.ptlink.net IP address on c, I made a little example:





/* <---- SOURCE CODE STARTS HERE ----> */



#include

#include    /* This is the header file needed for gethostbyname() */

#include

#include

#include





int main(int argc, char *argv[])

{

  struct hostent *he;



  if (argc!=2){

     printf("Usage: %s \n",argv[0]);

     exit(-1);

  }



  if ((he=gethostbyname(argv[1]))==NULL){

     printf("gethostbyname() error\n");

     exit(-1);

  }



  printf("Hostname : %s\n",he->h_name);  /* prints the hostname */

  printf("IP Address: %s\n",inet_ntoa(*((struct in_addr *)he->h_addr))); /* prints IP address */

}

/* <---- SOURCE CODE ENDS HERE ----> */







8. A STREAM SERVER EXAMPLE

=======================================



In this section, I'll show you a nice example of a stream server. The source code is all

commented so that you ain't no possible doubts =)



Let's start:



/* <---- SOURCE CODE STARTS HERE ----> */



#include           /* These are the usual header files */

#include

#include

#include





#define PORT 3550   /* Port that will be opened */

#define BACKLOG 2   /* Number of allowed connections */



main()

{



  int fd, fd2; /* file descriptors */



  struct sockaddr_in server; /* server's address information */

  struct sockaddr_in client; /* client's address information */



  int sin_size;





  if ((fd=socket(AF_INET, SOCK_STREAM, 0)) == -1 ){  /* calls socket() */

    printf("socket() error\n");

    exit(-1);

  }



  server.sin_family = AF_INET;        

  server.sin_port = htons(PORT);   /* Remember htons() from "Conversions" section? =) */

  server.sin_addr.s_addr = INADDR_ANY;  /* INADDR_ANY puts your IP address automatically */  

  bzero(&(server.sin_zero),8); /* zero the rest of the structure */



 

  if(bind(fd,(struct sockaddr*)&server,sizeof(struct sockaddr))==-1){ /* calls bind() */

      printf("bind() error\n");

      exit(-1);

  }    



  if(listen(fd,BACKLOG) == -1){  /* calls listen() */

      printf("listen() error\n");

      exit(-1);

  }



while(1){

  sin_size=sizeof(struct sockaddr_in);

  if ((fd2 = accept(fd,(struct sockaddr *)&client,&sin_size))==-1){ /* calls accept() */

    printf("accept() error\n");

    exit(-1);

  }

 

  printf("You got a connection from %s\n",inet_ntoa(client.sin_addr) ); /* prints client's IP */

 

  send(fd2,"Welcome to my server.\n",22,0); /* send to the client welcome message */

 

  close(fd2); /*  close fd2 */

}

}



/* <---- SOURCE CODE ENDS HERE ----> */







9. A STREAM CLIENT EXAMPLE

=======================================



/* <---- SOURCE CODE STARTS HERE ----> */



#include

#include

#include

#include

#include         /* netbd.h is needed for struct hostent =) */



#define PORT 3550      /* Open Port on Remote Host */

#define MAXDATASIZE 100   /* Max number of bytes of data */



int main(int argc, char *argv[])

{

  int fd, numbytes;      /* files descriptors */

  char buf[MAXDATASIZE];  /* buf will store received text */

 

  struct hostent *he;         /* structure that will get information about remote host */

  struct sockaddr_in server;  /* server's address information */



  if (argc !=2) {          /* this is used because our program will need one argument (IP) */

    printf("Usage: %s \n",argv[0]);

    exit(-1);

  }



  if ((he=gethostbyname(argv[1]))==NULL){    /* calls gethostbyname() */

    printf("gethostbyname() error\n");

    exit(-1);

  }



  if ((fd=socket(AF_INET, SOCK_STREAM, 0))==-1){  /* calls socket() */

    printf("socket() error\n");

    exit(-1);

  }



  server.sin_family = AF_INET;

  server.sin_port = htons(PORT); /* htons() is needed again */

  server.sin_addr = *((struct in_addr *)he->h_addr);  /*he->h_addr passes "*he"'s info to "h_addr" */

  bzero(&(server.sin_zero),8);



  if(connect(fd, (struct sockaddr *)&server,sizeof(struct sockaddr))==-1){ /* calls connect() */

    printf("connect() error\n");

    exit(-1);

  }



  if ((numbytes=recv(fd,buf,MAXDATASIZE,0)) == -1){  /* calls recv() */

    printf("recv() error\n");

    exit(-1);

  }



      buf[numbytes]='\0';



      printf("Server Message: %s\n",buf); /* it prints server's welcome message =) */



      close(fd);   /* close fd =) */

}



/* <---- SOURCE CODE ENDS HERE ----> */







10. LAST WORDS

=======================================

As I'm just a simple human, it's almost certain that there are some errors on this document.

When I say errors I mean English errors (because my language is not the English) but also

technical errors. Please email me if you detect any error =)


But you must understand that this is the first version of this document, so , it's natural not

to be very complete (as matter of fact I think it is ) and it's also very natural to have

stupid errors. However, I can be sure that source code presented in this document works fine.


If you need help concerning this subject you can email me at

SPECIAL THANKS TO: Ghost_Rider (my good old mate), Raven (for letting me write this tutorial)

           and all my friends =)