The following Max/MSP patch uses the netsend object to send data over a TCP socket. It sends three values. The Processing sketch further down is a server that receives the string that the Max patch sends and uses it to move a ball on the screen.
Technorati Tags: networked objects, networks
max v2; #N vpatcher 35 147 635 547; #P window setfont "Sans Serif" 9.; #P window linecount 1; #P newex 187 227 68 196617 prepend send; #P newex 187 202 52 196617 pak 0 0 0; #P number 281 170 35 9 0 255 3 3 0 0 0 221 221 221 222 222 222 0 0 0; #P number 187 170 35 9 0 255 3 3 0 0 0 221 221 221 222 222 222 0 0 0; #P number 233 170 35 9 0 255 3 3 0 0 0 221 221 221 222 222 222 0 0 0; #P message 60 169 55 196617 disconnect; #P message 60 144 114 196617 connect localhost 3000; #P number 47 294 35 9 0 0 0 3 0 0 0 221 221 221 222 222 222 0 0 0; #P newex 47 270 43 196617 netsend; #P comment 186 151 155 196617 three arbitrary integer values:; #P window linecount 4; #P comment 60 88 100 196617 click here to connect after server application is running:; #P window linecount 2; #P comment 60 194 75 196617 click here to disconnect; #P window linecount 1; #P comment 242 202 154 196617 packs three values into one list; #P comment 260 227 202 196617 adds the command "send" before the list; #P comment 86 294 258 196617 Whether netsend is connected to the server or not; #P window linecount 4; #P comment 215 55 82 196617 NetSend tester Created 29 Nov 2006 by Tom Igoe; #P fasten 10 0 7 0 65 189 52 189; #P fasten 9 0 7 0 65 163 52 163; #P fasten 15 0 7 0 192 258 52 258; #P connect 7 0 8 0; #P fasten 12 0 14 0 192 193 192 193; #P connect 14 0 15 0; #P fasten 11 0 14 1 238 188 213 188; #P fasten 13 0 14 2 286 192 234 192; #P pop;
Here’s the Processing server sketch:
/*
Max Server
Accepts three values from a remote client. Uses those values
to draw and move a ball.
This server expects a string containing ASCII-encoded integers
terminated by a semicolon. This is the format that Max/MSP's netsend
object sends data.
by Tom Igoe
Created 18 Mar 2005
Modified 20 Aug 2007
*/
// import the net library:
import processing.net.*;
int port = 3000; // incoming TCP port
Server myServer; // server object
void setup()
{
size(256, 256);
background(0);
myServer = new Server(this, port); // Starts a server on port 3000
smooth();
}
void draw()
{
// see if there's a client that's connected and sent data:
Client thisClient = myServer.available();
if (thisClient != null) {
// if there are bytes in the client's incoming data buffer:
if (thisClient.available() > 0) {
// read the incoming string:
String thisString = thisClient.readString();
// split it at the semicolon to strip off the semicolon:
String[] pieces = split(thisString, ";");
// save only what's before the semi:
thisString = pieces[0];
// split the resulting string on the space characters:
int messages[] = int(split(thisString, " "));
// if you've got three pieces, use them to draw the ball:
if (messages.length > 2) {
drawBall(messages[0], messages[1], messages[2]);
}
}
}
}
// draw the ball:
void drawBall(int x, int y, int greyscale) {
background(255 - );
fill(greyscale);
ellipse(x, y, 20, 20);
}