Open Sound Control (OSC)

Server.default=s=Server.internal;

Used for sending information across a network. 

It is the lifeblood of SuperCollider since all communication from the language application to the localhost server uses OSC! You may also send messages to any other SuperCollider Servers for which you have an IP location. So SuperCollider is immediately equiped for network music.  

You can also use it to communicate with other applications like Max or PD

To send general OSC to a known IP use the NetAddr class:

[NetAddr]

//demo to send to the localhost Server
(
var n, id;

//loopback address- try substituting the IP address of another user's machine
n=NetAddr("127.0.0.1", 57110);

id=s.nextNodeID;
n.sendMsg("s_new",\default,id,0,0); 

SystemClock.sched(1.0,{n.sendMsg("n_free",id); });
)

To send standard messages to control a SuperCollider server, the Server class is a better interface. Underneath, it uses NetAddr as above.  
[Server]

You can also use Julian Rorhuber's  BroadcastServer class to send messages to a list of NetAddrs (usually other SuperCollider Servers on other machines)
[BroadcastServer]  //there is no help file at present

To receive and react to OSC messages you will use an OSCresponder classes 
[OSCresponder]

(
// register to receive a trigger message
OSCresponder(s.addr,'/tr',{ arg time,responder,msg;

"received trigger!".postln;
Post << msg <<nl;

}).add;	

//send a trigger message whenever the impulse fires (once every 2 seconds)
{SendTrig.ar(Impulse.ar(0.5))}.play;
)		

//keep it running and now run these lines:
(
OSCresponder(s.addr,'/tr',{ arg time,responder,msg;

"new reaction!".postln;
Post << time <<nl;

}).add;	
)		

//remove the responder
OSCresponder.all.do({arg val; if(val.cmdName=='/tr',{OSCresponder.remove(val)}); })

OSCresponderNode can be used if you need more than one responder for a particular message. 
[OSCresponderNode]

(
// register to receive a trigger message
OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg;

"received trigger!".postln;
Post << msg <<nl;

}).add;	

OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg;

"different reaction!".postln;
Post << time <<nl;

}).add;	

//send a trigger message whenever the impulse fires (once every 2 seconds)
{SendTrig.ar(Impulse.ar(0.5))}.play;
)	

//clear all OSCresponderNodes for the trigger message
OSCresponder.all.do({arg val; if(val.cmdName=='/tr',{OSCresponder.remove(val)}); })

This would have been easier if we'd set each created OSCresponderNode into a variable x say, then we could go:

x=OSCresponderNode(s.addr,'/tr',{ arg time,responder,msg;  "bang!".postln;}).add

then

x.remove;