The Client
example was bound to port 3000 on
oit2.scps.nyu.edu
.
This server is bound to TCP port 3001.
The
restaurants.db
file was created in
Restaurant.
#!/bin/perl #To launch this server on oit2.scps.nyu.edu and bind it to TCP port number 3001, #/home/m/meretzkm/public_html/INFO1-CE9705/src/near/server.pl & use strict; use Socket; use IO::Socket; #Simple HTTP server in Perl, connected to an SQLite database. my $database_file = '/home/m/meretzkm/public_html/INFO1-CE9705/src/near/restaurants.db'; #Create a hash named %data containing the key/value pairs in the query string. sub parse_form { my $data = $_[0]; my %data; foreach (split /&/, $data) { my ($key, $val) = split /=/; $val =~ s/\+/ /g; $val =~ s/%(..)/chr(hex($1))/eg; $data{$key} = $val; print(" $key = $data{$key}\n"); } return %data; } #Create a socket with which the server can listen for clients. my $server = new IO::Socket::INET( Proto => 'tcp', LocalPort => 3001, #TCP port number I'm allowed to use on oit2.scps.nyu.edu Listen => SOMAXCONN, Reuse => 1); $server or die "Unable to create server socket: $!" ; # Await requests and handle them as they arrive while (my $client = $server->accept()) { my $peer_address = $client->peerhost(); print("Server accepted a connection from client $peer_address.\n"); $client->autoflush(1); my %request = (); my %data; { #Read the client's request. local $/ = Socket::CRLF; while (<$client>) { chomp; print("Server read the line $_\n"); if (/\s*(GET)\s*([^\s]+)\s*HTTP\/(\d\.\d)/) { $request{METHOD} = uc $1; $request{URL} = $2; $request{HTTP_VERSION} = $3; } elsif (/\s*(PUT)\s*([^\s]+)\s*/) { $request{METHOD} = uc $1; $request{URL} = $2; } elsif (/:/) { (my $type, my $val) = split /:/, $_, 2; $type =~ s/^\s+//; foreach ($type, $val) { s/^\s+//; s/\s+$//; } $request{lc $type} = $val; } # POST data elsif (/^$/) { read($client, $request{CONTENT}, $request{'content-length'}) if defined $request{'content-length'}; last; } } } #If the URL contained a query string, if ($request{URL} =~ /(.*)\?(.*)/) { $request{URL} = $1; $request{CONTENT} = $2; %data = parse_form($request{CONTENT}); } else { %data = (); } if ($request{METHOD} eq 'GET') { # Send Response print $client "HTTP/1.0 200 OK", Socket::CRLF; print $client "Content-type: text/plain", Socket::CRLF; print $client Socket::CRLF; my $select_statement = "select dba, building, street, zipcode, MIN(_id) " . "from restaurants where zipcode = $data{zipcode} " . "group by dba;"; my $found = `sqlite3 $database_file '$select_statement'`; #chomp $found; print $client $found; $data{'_status'} = '200'; } close $client; #Close the server's connection to the client. print("\n"); }
cd /home/m/meretzkm/public_html/INFO1-CE9705/src/client server.pl & netstat -a -f inet -P tcp TCP: IPv4 Local Address Remote Address Swind Send-Q Rwind Recv-Q State -------------------- -------------------- ----- ------ ----- ------ ----------- *.ssh *.* 0 0 128000 0 LISTEN *.80 *.* 0 0 128000 0 LISTEN *.* *.* 0 0 128000 0 IDLE i5.ssh cpe-66-108-91-251.nyc.res.rr.com.49727 131008 0 128872 0 ESTABLISHED *.3001 *.* 0 0 128000 0 LISTEN *.smtp *.* 0 0 128000 0 LISTEN *.sunrpc *.* 0 0 128000 0 LISTEN *.* *.* 0 0 128000 0 IDLE *.sunrpc *.* 0 0 128000 0 LISTEN *.* *.* 0 0 128000 0 IDLE *.3306 *.* 0 0 128000 0 LISTEN *.5666 *.* 0 0 128000 0 LISTEN i5.ssh cpe-66-108-91-251.nyc.res.rr.com.49299 131008 0 128872 0 ESTABLISHED
jobs [1] - Running server.pl & kill %1 jobs
Zipcode 10007 contained the following 122 restaurants. Zipcode 10279 (just the Woolworth Building) contained one restaurant.
http://oit2.scps.nyu.edu:3001/?zipcode=10007
27 SHINJUKU SUSHI INC|27|PARK PLACE|10007|394488 AAA BURRITO MARIACHI|189|CHURCH STREET|10007|488934 AGODA ASIAN CUISINE|8 |MURRAY STREET |10007|443779 AKIMOTO SUSHI|187|CHURCH STREET|10007|422594 ANDY'S DELI|291|BROADWAY|10007|408101 AROMA ESPRESSO BAR|100|CHURCH STREET|10007|375620 AROME|325 |BROADWAY|10007|454570 AROME CAFE II|7|DEY STREET|10007|281656 ATOMIC WINGS|311|BROADWAY|10007|405770 B & CO Baguettes & Company|195 |BROADWAY |10007|100979 BABAGHANOUSH|165 |CHURCH STREET |10007|244931 BALUCHI'S|275 |GREENWICH STREET |10007|106945 BANGAL CURRY|27|PARK PLACE|10007|33245 BANH MI VEITNAMESE SANDWICHES|73|WEST BROADWAY|10007|266394 BARCLAY STREET CAFE|245|GREENWICH STREET|10007|456498 BARLEYCORN|23|PARK PL|10007|495525 BARNES AND NOBLE BOOKSELLERS|97|WARREN STREET|10007|196153 BENARES|45 |MURRAY STREET |10007|419289 BEST OF THE BEST DELICATESSEN|11 |PARK PLACE |10007|125715 BITS BITE & BAGUETTES|22|PARK PLACE|10007|51751 BLUESPOON COFFEE|76|CHAMBERS STREET|10007|142091 BURGER KING|325 |BROADWAY|10007|480159 BY SUZETTE FRENCH CREPES|86|CHAMBERS STREET|10007|478168 CAFE|180|GREENWICH ST|10007|499122 CAFE 101|101 |BARCLAY STREET |10007|436409 CAFE 101 16TH FLOOR CAFETERIA|101 |BARCLAY STREET |10007|34686 CANTEEN CAFE|125|BARCLAY STREET|10007|460208 CAVIARTERIA|75|MURRAY STREET|10007|475451 CENTRE MELTS|1 |CENTRE STREET |10007|442382 CHECKERS|77|CHAMBERS ST|10007|470260 CHINA RED GOURMENT|118|CHAMBERS STREET|10007|412089 CHIPOTLE MEXICAN GRILL|281|BROADWAY|10007|361179 CHURCH PUBLICK|78|READE STREET|10007|458073 CONDE NAST CONFERENCE CENTER|1|WORLD TRADE CENTER|10007|497658 CORNER GOURMET II|66 |WEST BROADWAY |10007|40308 CORTE CAFE|2 |LAFAYETTE STREET |10007|116105 CREATIVE JUICE|54|MURRAY STREET|10007|461390 DARKHORSE|17|MURRAY STREET|10007|317235 DELIMARIE|106|DUANE STREET|10007|254175 DIRTY BIRD TO GO|155|CHAMBERS STREET|10007|404961 DOMINO'S PIZZA|181 |CHURCH STREET |10007|29767 DONA BELLA PIZZA|154 |CHURCH STREET |10007|238043 DRILL FITNESS|136|CHURCH ST|10007|489422 DUNKIN DONUTS|130|CHURCH STREET|10007|229589 DUNKIN' DONUTS|5|PARK PLACE|10007|148894 DUNKIN' DONUTS, BASKIN ROBBINS|321|BROADWAY|10007|131236 ECCO RESTAURANT|124|CHAMBERS STREET|10007|453563 ELIEZER KITCHEN|100|CHURCH STREET|10007|303100 EQUINOX TRIBECA|54|MURRAY ST|10007|499481 FAMOUS FAMIGLIA PIZZA|26|MURRAY STREET|10007|489386 FIKA|52|DUANE ST|10007|498451 GEE WHIZ|295|GREENWICH STREET|10007|218579 GRAN MORSI|22|WARREN STREET|10007|475898 GRAZIN''|56|READE ST|10007|498496 HAMACHI SUSHI|63A |READE STREET |10007|448908 HARPER COLLINS|195 |BROADWAY |10007|486109 IL GIGLIO|81|WARREN STREET|10007|335031 IMPERIAL COFFEE HOUSE|108 |CHAMBERS STREET |10007|12080 J R SUSHI|86A|W BROADWAY|10007|470564 JAMBA JUICE|88 |WEST BROADWAY |10007|139042 JUPIOCA INC|113|CHURCH STREET|10007|488442 Juice Press|83|MURRAY STREET|10007|486423 KAEDE JAPANESE RESTAURANT|90|CHAMBERS ST|10007|491241 KAFFE 1668|275 |GREENWICH STREET |10007|225509 KITCHENETTE|156|CHAMBERS STREET|10007|159803 KOKI & VEGI|1 |CENTRE STREET |10007|339755 LA BELLEZZA PIZZERIA|315|BROADWAY|10007|457597 LE PAIN QUOTIDIEN|81|WEST BROADWAY|10007|214403 LENNY'S ULTIMATE SANDWICH|25 |PARK PLACE |10007|439080 LILLY O'BRIENS|18|MURRAY ST|10007|471664 LITTLE ITALY PIZZA|11 |PARK PLACE |10007|235979 LITTLE PARK|85|W BROADWAY|10007|490973 MAJESTIC PIZZA|8|CORTLANDT STREET|10007|52109 MANGEZ AVEC MOI|71|WEST BROADWAY|10007|60363 MANHATTAN PROPER|6 |MURRAY STREET |10007|398763 MARIACHI'S RESTAURANT|61|WARREN STREET|10007|443634 MAXWELL'S|59 |READE STREET |10007|340347 MCDONALD'S|317|BROADWAY|10007|363725 MILLENIUM HILTON|55|CHURCH STREET|10007|357775 MOODY'S CAFETERIA|250|GREENWICH STREET|10007|188501 MUDVILLE SALOON|126 |CHAMBERS STREET |10007|6665 MULBERRY & VINE|73|WARREN STREET|10007|436696 MUSCLE MAKER GRILL|10 |MURRAY STREET |10007|279867 N.Y. ACADEMY OF SCIENCE|250|GREENWICH STREET|10007|164768 NEW FRESCO TORTILLAS|63|READE STREET|10007|249619 NEW SUN CAFE|67 |READE STREET |10007|490185 NEW YORK DOLLS|59|MURRAY STREET|10007|85792 NEW YORK VINTNERS|21|WARREN STREET|10007|257171 NYC YOGURT|299 |BROADWAY |10007|445071 OLIVA GOURMET|225|BROADWAY|10007|110033 ONE WORLD OBSERVATORY|1|WORLD TRADE CTR|10007|499124 PALERMO PIZZA|61|MURRAY STREET|10007|221498 PALM RESTAURANT|200|CHAMBERS STREET|10007|223425 PLAZA FOOD COURT|1 |CENTRE STREET |10007|328157 POTBELLY|280|BROADWAY|10007|377243 PRET A MANGER|319 |BROADWAY |10007|294995 RACCOON LODGE|59 |WARREN STREET |10007|9861 RACINES|94|CHAMBERS ST|10007|475237 REMIX|24|MURRAY STREET|10007|127202 SABOR DE MEXICO|11 |PARK PLACE |10007|429599 SAFFRON INDIAN CUISINE|98 |CHAMBERS STREET |10007|424142 SALEYA|65 |WEST BROADWAY |10007|343304 SHEEZAN RESTAURANT|183 |CHURCH STREET |10007|448885 SOLE DI CAPRI|165 |CHURCH STREET |10007|410952 SOPHIE'S CUBAN CUISINE|96 |CHAMBERS STREET |10007|317892 STAGE DOOR DELI|26 |VESEY STREET |10007|19248 STARBUCKS COFFEE|291|BROADWAY|10007|52168 SUBWAY|51|MURRAY STREET|10007|263163 SUN IN BLOOM|165 |CHURCH STREET |10007|490467 TAKAHACHI BAKERY|25|MURRAY STREET|10007|273174 TET TEST|22 |CORTLANDT STREET |10007|487845 THE COFFEE BEAN & TEA LEAF|280|BROADWAY|10007|441153 THE CRICKETERS ARMS|57 |MURRAY STREET |10007|420044 THE HUMMUS & PITA CO.|79 |CHAMBERS STREET |10007|435913 THE PATRIOT SALOON|110 |CHAMBERS STREET |10007|106164 TRE SORELLE|61|READE STREET|10007|356491 WARREN 77|77 |WARREN STREET |10007|242123 WASHINGTON MARKET TAVERN|41 |MURRAY STREET |10007|484867 WILMER HALE|7|WORLD TRADE CENTER|10007|400755 WOODROWS|43|MURRAY STREET|10007|374892 Yorganic|275 |GREENWICH STREET |10007|313520 ZUCKER'S BAGELS AND SMOKED FISH|146|CHAMBERS STREET|10007|191115
telnet oit2.scps.nyu.edu 3001 Trying 128.122.109.53... Connected to oit2.scps.nyu.edu. Escape character is '^]'. GET ?zipcode=10007 HTTP/1.0 (Press Return twice.)
Server accepted a connection from client 66.108.91.251. Server read the line GET /?zipcode=10007 HTTP/1.1 Server read the line Host: oit2.scps.nyu.edu:3001 Server read the line Connection: keep-alive Server read the line Cache-Control: max-age=0 Server read the line Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 Server read the line User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Server read the line Accept-Encoding: gzip, deflate, sdch Server read the line Accept-Language: en-US,en;q=0.8 Server read the line zipcode = 10007 Server accepted a connection from client 66.108.91.251. Server read the line GET /favicon.ico HTTP/1.1 Server read the line Host: oit2.scps.nyu.edu:3001 Server read the line Connection: keep-alive Server read the line User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36 Server read the line Accept: */* Server read the line Referer: http://oit2.scps.nyu.edu:3001/?zipcode=10007 Server read the line Accept-Encoding: gzip, deflate, sdch Server read the line Accept-Language: en-US,en;q=0.8 Server read the line Error: near "group": syntax error