Java Network Programming „

Introduction

„

Java Socket Programming

CSCE 515: Computer Network Programming

… InetAddress … Socket

------ Java Network Programming reference: Dave Hollinger

… ServerSocket

Wenyuan Xu

… DatagramSocket

Department of Computer Science and Engineering University of South Carolina

Multicast Socket

„

2007

CSCE515 – Computer Network Programming

Why Java? „

Network Programming in Java is very different than in C/C++ … much

more language support … error handling … no pointers! (garbage collection) … Threads are part of the language. … some support for common application level protocols (HTTP).

Crash Course in Java

4 Netprog: Java Intro

First Program: Simp.java

Java notes for C++ programmers Everything is an object. „ No code outside of class definition! „ Single inheritance „

… an

„

public public static static void void main(String main(String args[]) args[]) {{ System.out.println("Hello, Netprog"); System.out.println("Hello, Netprog"); }}

additional kind of inheritance: interfaces

All classes are defined in .java files … one

„

public public class class Simp Simp {{

top level public class per file }}

To print to stdout: … System.out.println(); 5 Netprog: Java Intro

6 Netprog: Java Intro

Java bytecode and interpreter

Compiling and Running

„

bytecode is an intermediate representation of the program (class).

„

The Java interpreter starts up a new “Virtual Machine”.

„

The VM starts executing the users class by running it’s main() method.

javac Simp.java

Simp.java

compile run

source code

java Simp

Simp.class bytecode 7

8

Netprog: Java Intro

Java Data Types „

Primitive Data Types:

Netprog: Java Intro

an not

Other Data Types

int!

„

… boolean

true or false … char unicode! (16 bits) … byte signed 8 bit integer … short signed 16 bit integer … int signed 32 bit integer … long signed 64 bit integer … float,double IEEE 754 floating point

Reference types (composite) … classes … arrays

„

strings are supported by a built-in class named String … Not

„

an array of chars!

string literals are supported by the language (as a special case).

9

10

Netprog: Java Intro

Netprog: Java Intro

Classes and Objects

Defining a Class

“All Java statements appear within methods, and all methods are defined within classes”. „ Java classes are very similar to C++ classes (same concepts). „ Instead of a “standard library”, Java provides a lot of Class implementations.

„

„

One top level public class per .java file. … typically

end up with many .java files for a single program. … One (at least) has a static public main() method. „

Class name must match the file name! … compiler/interpreter

use class names to figure out what file name is.

11 Netprog: Java Intro

12 Netprog: Java Intro

Sample Class

Objects and new

(from Java in a Nutshell)

public class Point { public double x,y; public Point(double x, double y) { this.x = x; this.y=y; } public double distanceFromOrigin(){ return Math.sqrt(x*x+y*y); } }

You can declare a variable that can hold an object: Point p;

but this doesn’t create the object! You have to use new: Point p = new Point(3.1,2.4);

there are other ways to create objects…

13

14

Netprog: Java Intro

Netprog: Java Intro

Using objects „

Reference Types

Just like C++:

Objects and Arrays are reference types „ Primitive types are stored as values. „ Reference type variables are stored as references (pointers that we can’t mess with). „ There are significant differences! „

… object.method() … object.field

„

BUT, never like this (no pointers!) … object->method() … object->field

15

16

Netprog: Java Intro

Netprog: Java Intro

Primitive vs. Reference Types

Passing arguments to methods

int x=3; int y=x;

„

Primitive types: the method gets a copy of the value. Changes won’t show up in the caller.

„

Reference types: the method gets a copy of the reference, the method accesses the same object!

There are two copies of the value 3 in memory

Point p = new Point(2.3,4.2); Point t = p; There is only one Point object in memory!

17 Netprog: Java Intro

18 Netprog: Java Intro

Importing classes and packages

Packages „

Instead of #include, you use import „ You don’t have to import anything, but then you need to know the complete name (not just the class, the package).

You can organize a bunch of classes into a package.

„

… defines

a namespace that contains all the classes.

„

You need to use some java packages in your programs … java.lang

… if

you import java.io.File you can use File objects. … If not – you need to use java.io.File objects.

java.io, java.util

19 Netprog: Java Intro

Exceptions „

Try/Catch/Finally

Terminology: … throw

an exception: signal that some condition (possibly an error) has occurred. … catch an exception: deal with the error (or whatever). „

20 Netprog: Java Intro

In Java, exception handling is necessary (forced by the compiler)!

21 Netprog: Java Intro

try { // some code that can throw // an exception } catch (ExceptionType1 e1) { // code to handle the exception } catch (ExceptionType2 e2) { // code to handle the exception } finally { // code to run after the stuff in try // can handle other exception types } 22

Netprog: Java Intro

Exceptions and Network Programming „

Exceptions take care of handling errors … instead

of returning an error, some method calls will throw an exception.

„

Socket Programming

A little hard to get used to, but forces the programmer to be aware of what errors can occur and to deal with them.

23 Netprog: Java Intro

Java Sockets Programming

Classes

The package java.net provides support for sockets programming (and more). „ Typically you import everything defined in this package with:

InetAddress Socket ServerSocket DatagramSocket DatagramPacket

„

import java.net.*;

25

26

Netprog: Java Sockets

Netprog: Java Sockets

java.net.InetAddress class „

Sample Code: Lookup.java

static methods you can use to create new InetAddress objects. public static InetAdress getByName(String host) public static InetAdress getLocalHost() public static InetAdress[] getAllByName(String hostName)

„

Uses InetAddress class to lookup hostnames found on command line.

¾

java Lookup www.yahoo.com

www.yahoo.com:209.191.93.52 InetAddress x = InetAddress.getByName( “cse.sc.edu”);

27

28

Netprog: Java Sockets

Netprog: Java Sockets

Sample Code: getLocalhost.java try try {{

„

Uses InetAddress class to lookup localhost

¾

java getLocalhost

InetAddress InetAddress aa == InetAddress.getByName(hostname); InetAddress.getByName(hostname); System.out.println(hostname System.out.println(hostname ++ ":" ":" ++ a.getHostAddress()); a.getHostAddress()); }} catch catch (UnknownHostException (UnknownHostException e) e) {{

broad/129.252.130.139

System.out.println("No System.out.println("No address address found found for for "" ++ hostname); hostname); }}

29 Netprog: Java Sockets

30 Netprog: Java Sockets

getLocalhost()

getAllByName()

try try {{ InetAddress InetAddress address address == InetAddress.getLocalHost(); InetAddress.getLocalHost();

try try {{ InetAddress[] InetAddress[] addresses addresses == InetAddress.getAllByName("www.microsoft.com"); InetAddress.getAllByName("www.microsoft.com"); for for (int (int ii == 0; 0; ii << addresses.length; addresses.length; i++) i++) {{ System.out.println(addresses[i]); System.out.println(addresses[i]); }} }} catch catch (UnknownHostException (UnknownHostException e) e) {{ System.out.println("Could System.out.println("Could not not find find www.microsoft.com"); www.microsoft.com"); }}

System.out.println(address); System.out.println(address); }} catch catch (UnknownHostException (UnknownHostException e) e) {{ System.out.println("Could System.out.println("Could not not find find this this computer's computer's address."); address."); }} }}

31 Netprog: Java Sockets

2007

How to open a socket?

Client Socket Constructors „

„

Socket class: corresponds to active TCP sockets only! … client

sockets … socket returned by accept(); „

CSCE515 – Computer Network Programming

Constructor creates a TCP connection to a named TCP server. … There

are a number of constructors:

Socket(InetAddress server, int port); Socket(InetAddress server, int port, InetAddress local, int localport);

Passive sockets are supported by a different class: ServerSocket

Socket(String hostname, int port); „

UDP sockets are supported by DatagramSocket 33

34

Netprog: Java Sockets

Netprog: Java Sockets

Client Socket Constructors

Client Socket Constructors

Socket(String hostname, int port);

Socket(InetAddress server, int port);

Socket Socket MyClient; MyClient;

InetAddress InetAddress myServerAddr; myServerAddr; Socket Socket MyClient; MyClient;

try try {{

try try {{

MyClient MyClient == new new Socket(“www.yahoo.com", Socket(“www.yahoo.com", 80); 80);

myServerAddr myServerAddr == InetAddress.getByName(“www.yahoo.com”); InetAddress.getByName(“www.yahoo.com”); MyClient MyClient == new new Socket(myServerAddr, Socket(myServerAddr, 80); 80);

}} catch catch (UnKnowHostException (UnKnowHostException e) e) {{ System.out.println(e); System.out.println(e); }} catch catch (IOException (IOException e) e) {{

}} catch catch (UnKnowHostException (UnKnowHostException e) e) {{ System.out.println(e); System.out.println(e); }} catch catch (IOException (IOException e) e) {{ System.out.println(e); System.out.println(e); }}

System.out.println(e); System.out.println(e); }}

35 Netprog: Java Sockets

36 Netprog: Java Sockets

Socket Methods

Socket I/O

void close(); InetAddress getInetAddress(); getpeername InetAddress getLocalAddress(); getsockname InputStream getInputStream(); OutputStream getOutputStream();

„

Socket I/O is based on the Java I/O support (in the package java.io).

„

InputStream and OutputStream are abstract classes … common

operations defined for all kinds of InputStreams, OutputStreams…

Lots more (setting/getting socket options, partial close, etc.)

„

37

38

Netprog: Java Sockets

Netprog: Java Sockets

InputStream Basics

OutputStream Basics

// reads some number of bytes and // puts in buffer array b int read(byte[] b);

// writes b.length bytes void write(byte[] b);

// reads up to len bytes int read(byte[] b, int off, int len);

// writes len bytes starting // at offset off void write(byte[] b, int off, int len);

Both methods can throw IOException. Both methods can throw IOException.

Both return –1 on EOF. 39

40

Netprog: Java Sockets

Output stream example InetAddress InetAddress myServerAddr; myServerAddr; Socket Socket MyClient; MyClient;

Netprog: Java Sockets

Sample Client „

smtpClient.java

„

Simple client code to send an email via an smtp server

„

Client:

DataOutputStream DataOutputStream output; output; try try {{ …… output output == new new DataOutputStream(MyClient.getOutputStream()); DataOutputStream(MyClient.getOutputStream()); output.writeBytes(“hello”); output.writeBytes(“hello”); output.writeBytes("DATA\n"); output.writeBytes("DATA\n"); }} catch catch (IOException (IOException e) e) {{ System.out.println(e); System.out.println(e); }} 2007

CSCE515 – Computer Network Programming

…

Open a socket. Open an input and output stream to the socket. … Read from and write to the socket according to the server's protocol. … Clean up. …

CSCE515 – Computer Network Programming

ServerSocket Class –Servers (TCP Passive Socket) „

ServerSocket Constructors ServerSocket(int port, int backlog); ServerSocket ServerSocket MyService; MyService;

Constructors:

try try {{ MyService MyService == new new ServerSocket(PortNumber, ServerSocket(PortNumber, 90); 90);

ServerSocket(int port); }} catch catch (IOException (IOException e) e) {{ System.out.println(e); System.out.println(e); }}

ServerSocket(int port, int backlog); ServerSocket(int port, int backlog, InetAddress bindAddr); 43

44

Netprog: Java Sockets

Netprog: Java Sockets

Sample Echo Server

ServerSocket Methods Socket accept();

„

TCPEchoServer.java

void close();

„

Server:

5.

Create a ServerSocket accept incoming request, get a Socket Open an input and output stream to the Socket. Read from and write to the Socket according to the server's protocol. Close the Socket

6.

Return to step 2

1. 2.

InetAddress getInetAddress();

3. 4.

int getLocalPort(); throw IOException, SecurityException 45

46

Netprog: Java Sockets

Netprog: Java Sockets

UDP Sockets „

DatagramSocket class

„

DatagramPacket class needed to specify the payload (incoming or outgoing).

DatagramSocket Constructors DatagramSocket(); DatagramSocket(int port); DatagramSocket(int port, InetAddress a);

All can throw SocketException or SecurityException. When should each constructors be used? 47 Netprog: Java Sockets

48 Netprog: Java Sockets

Client UDP Socket constructor

UDP port scanner

try try {{

for for (int (int port port == 1024; 1024; port<=65535; port<=65535; port++){ port++){ try try {{ DatagramSocket server = new DatagramSocket(port); DatagramSocket server = new DatagramSocket(port); server.close(); server.close();

DatagramSocket DatagramSocket client client == new new DatagramSocket(); DatagramSocket(); //send //send packets…. packets…. }} catch catch (SocketException (SocketException e) e) {{ System.out.println(e); System.out.println(e); }}

2007

}} catch catch (SocketException (SocketException e) e) {{ System.out.println(“there System.out.println(“there is is aa server server on on port”+port+ port”+port+ “.”); “.”); }} }}

CSCE515 – Computer Network Programming

2007

CSCE515 – Computer Network Programming

DatagramSocket Methods

DatagramPacket

void receive(DatagramPacket p);

„

Contain the payload (a byte array).

„

Can also be used to specify the destination address (when not using connected mode UDP).

void send(DatagramPacket p); void connect (int port, InetAddress); void close();

Lots more!

ssize_t sendto( int sockfd, const void *buff, size_t nbytes, int flags, const struct sockaddr* to, socklen_t addrlen); 51 Netprog: Java Sockets

52 Netprog: Java Sockets

DatagramPacket Constructors

DatagramPacket methods

For receiving: DatagramPacket( byte[] buf, int len);

byte[] getData(); void setData(byte[] buf);

For sending: DatagramPacket( byte[] buf, int len InetAddress a, int port);

void setAddress(InetAddress a); void setPort(int port);

destination address

InetAddress getAddress(); int getPort(); could be either address (depends on context)

53 Netprog: Java Sockets

54 Netprog: Java Sockets

Sample UDP code UDPEchoServer.java Simple UDP Echo server.

Multicast

Test using nc as the client (netcat): > nc –u hostname port

CSCE515 – Computer Network Programming

55 Netprog: Java Sockets

Multicasting „

Unicast … …

„

A flow from one source to one destination IP packets contain destination IP address

Broadcast … …

„

Multicast vs. Multiple Unicast

A flow from one source to all destinations IP packets contain broadcast address 255.255.255.255

Multicast …

A flow from one source transmits to a Group of destinations IP packets contain a class D address for destination … Ranges from 224.0.0.0 to 239.255.255.255 (256K addresses) …

CSCE515 – Computer Network Programming

Advantages of Multicasting „

Lower overhead at the source „

…

Source sends only one packet

Class D

1 1 1 0

28 multicast group ID

Bandwidth is conserved on shared links „

Only one copy of each packet is sent on each link 224.0.0.0 -- 239.255.255.255 The set of hosts listening to a particular multicast address is called a host group

Requirements: …

Group address management

…

Packet duplication at routing nodes

„

„

Multicast Addressing

Advantages: …

„

CSCE515 – Computer Network Programming

– Network/router participation

Disadvantages …

Security … Business models … No Incentives for deployment CSCE515 – Computer Network Programming

Multicast packets, at least for now, are sent only as UDP packets (WHY?) Some of the addresses 224.0.0.0 to 224.0.0.15 are reserved for well-known groups 239.0.0.0 to 239.255.255.255 are for local/administratively scoped applications Like any IP address, a multicast address can have a hostname, e.g. 224.0.0.2 -- all-routers.mcast.net (All routers on the local subnet) CSCE515 – Computer Network Programming

Mapping to Ethernet Addresses „

Ethernet has a 48-bit address field

Link-Layer Multicast Addresses „

…

„

Lower order 23 bits can be used for multicast addresses …

IP multicast address has 28 bits for specifying a group address … Thus, only the lower order 23 bits of IP multicast address are copied into the Ethernet address

Ranges from 01:00:5E:00:00:00 to 01:00:5E:7F:FF:FF …

It has its own multicast address range … 01.00.5e.00.00.00 through 01.00.5e.7f.ff.ff

Map low-order 23 bits of class D address to lower order 23 bits of ethernet multicast address space … Upper 5 bits of multicast group ID are ignored in the mapping, thus mapping is not unique „

For point-to-point links: no mapping needed.

CSCE515 – Computer Network Programming

Multicast service model „

…

…

No limits on number or location of receivers Best effort delivery (same as in unicast)

Dynamic membership …

„

Sender sends to a group address Any receiver who has joined this group gets this packets

Implications? …

„

Components of the IP Multicast Architecture

Uses the notion of host groups …

„

CSCE515 – Computer Network Programming

Host can join/leave at will (no synchronization required among group members)

Scope control …

Can limit the distribution using TTL CSCE515 – Computer Network Programming

Multicast Routers „

Biggest restriction on multicasting: … Availability

„

of special multicast routers

Check whether your routers support multicasting: wyxu@broad % ping all-routers.mcast.net all-routers.mcast.net is alive

CSCE515 – Computer Network Programming

CSCE515 – Computer Network Programming

IGMP „

Internet Group Management Protocol (IGMP)

„

Allows a router to know which of its directly connected hosts belongs to which multicast group

„

IGMP is required to support TRPB, RPM, CBT and PIM protocols

CSCE515 – Computer Network Programming

IGMPv1 Message Format

IGMP Host Queries

IGMP is part of the IP layer „ IGMP messages are transmitted in IP packets

„

„

0

34

78

IGMP IGMP version type(1-2)

15 16

unused

Routers uses IGMP “query” messages to periodically query hosts on their subnets and learn if they are members of any multicast group …

Queries are addressed to all hosts group (224.0.0.1) and carry an IP TTL of 1 (no more than once a minute) … Hosts who are members of multicast groups respond with one IGMP “report” message for each group they are a member of … To improve efficiency, hosts wait a random amount of time before responding

31

checksum 8 bytes

group address (class D IP address)

„ „

– During this waiting time, hosts listen to other host responses – If another host reports membership in the same group, then the first host aborts its report

67 CSCE515 – Computer Network Programming

IGMP Host Queries

IGMP Host Queries

CSCE515 – Computer Network Programming

IGMP Host Queries

CSCE515 – Computer Network Programming

Communicating with a Multicast Group „ Typical four key operations … Join

a multicast group data to the members of the group … Receive data from the group … Leave the multicast group … Send

CSCE515 – Computer Network Programming

„

To receive data from a multicast group, you have to join the group

„

To send data, you don’t have to join the group CSCE515 – Computer Network Programming

Class MulticastSocket Extend class DatagramSocket and add support for IP multicast „ Multiple MulticastSockets can listen to same port on same machine

Class MulticastSocket

„

try try {{ MulticastSocket MulticastSocket ms ms == new new MulticastSocket(); MulticastSocket(); //send //send some some datagrams datagrams

}} catch catch (SocketException (SocketException e) e) {{

„

Constructors MulticastSocket() MulticastSocket(int port) MulticastSocket(SocketAddress bindAddress)

Class MulticastSocket

System.out.println(e); System.out.println(e); }}

Sending Multicast Packets

Methods void joinGroup(InetAddress group) throws IOException void leaveGroup(InetAddress group) throws IOException void setTimeToLive(int ttl) throws IOException void setTTL(byte ttl) throws IOException int getTimeToLive() throws IOException byte getTTL() throws IOException void send(DatagramPacket packet, byte ttl) throws IOException void setInterface(InetAddress address) throws SocketException InetAddress getInterface() throws SocketException void receive(DatagramPacket p)

// byte[] data // InetAddress multicastGroup // int multicastPort MulticastSocket socket = new MulticastSocket();

DatagramPacket packet = new DatagramPacket (data, data.length, multicastGroup, multicastPort); socket.send(packet, (byte) 64);

Exceptions IOException SecurityException

socket.close();

75

76

Receiving Multicast Packets

Sample MulticastSocket code

MulticastSocket socket = new MulticastSocket(multicastPort); Socket.joinGroup(multicastGroup); byte buffer[] = new byte[65508]; DatagramPacket packet = new DatagramPacket();

socket.receive(packet);

InetAddress fromAddress = packet.getAddress(); int fromPort = packet.getPort(); int length = packet.getLength(); byte[] data = packet.getData(); // …

socket.leaveGroup(multicastGroup); socket.close();

MulticastSender.java MulticastSniffer.java Receiver: Broad % java MulticastSniffer allsystems.mcast.net 4000 Sender: Broad % java MulticastSender allsystems.mcast.net 4000 78

77

Netprog: Java Sockets

A Peer-to-Peer Multicast Chat System

Threads

Each client multicasts its message to other clients „ No server is involved; all clients communicate as peers „ Open a chat frame and start a thread that listens for incoming packets

„

„

79

Subclassing thread … … …

public class MyThread extends Thread{} public void run(){..} public static void main(String[] args) { „

new Mythread.start();}

Java Socket, ServerSocket, Multicasting, MulticastSocket - cse.sc.edu

CSCE515 – Computer Network Programming. 2007 ... □some support for common application level protocols (HTTP). ... First Program: Simp.java public class .... Uses InetAddress class to lookup hostnames ..... Security. □ Business models.

169KB Sizes 10 Downloads 162 Views

Recommend Documents

SOCKET OPTIONS
The reason for this option is that some higher-level Internet .... This socket options causes the destination IP address of a received UDP datqgram to be returned ...

socket options - SNS Courseware
The list of options that can be set and get by the socket options are listed in the fig ...... address by looking up the server's name in the DNS, given the IP address ...

socket options - All Syllabus
Broadcasting is supported for only datagram sockets and only on net works ... Calling setsockopt leads to one of the following three scenarios depending on the .... Can be used to establish separate servers for the same service on different ...

socket options - SNS Courseware
With TCP, the available room in the socket receive buffer is the window that TCP avertises ..... One solution is for the client to verify the responding host's domain name ..... o whether the resolver searches for A records or for AAAA records and.

Efficient multicasting for delay tolerant networks using ...
proposed method completes in less than 10 seconds on datasets ...... networks: a social network perspective,” in Proc. of MobiHoc, 2009, pp. 299–308.

Teensy 3.5/3.6 Socket Kit - cloudfront.net
1. TH. 1. 1. Mill-Max. 0908-6-15-20-75-14-11-0. Tall Dog Electronics. Page of. Revised 2017-02-08. 1 3. Contact Info. Name — Daniel Gilbert. Website — tall-dog.com. Email — [email protected] ... The silver side of the header should go throug

A Scalable Approach for DiffServ Multicasting
Department of Electrical and Computer Engineering. Iowa State ... main that is scalable in terms of group size, network size, and number of groups. We analyze our ..... required for the branch field is equal to the maximum degree, % , of any.

Distributed Utility Maximization for Network Coding Based Multicasting ...
include for example prior works on Internet flow control [9] and cross-layer ...... wireless network using network coding have been formulated in [20], [21] ..... [3] T. Ho, R. Koetter, M. Médard, D. R. Karger, and M. Effros, “The benefits of codi

Multicasting in Energy Aware Mobile Backbone Based ...
This work was supported by the National Science Foundation (NSF) Grant. No. ANI-0087148, by ...... big data packets is undesirable. The decoupling also ...

Multicasting in Mobile Backbone Based Ad Hoc Wireless Networks
Abstract – The synthesis of efficient and scalable multicasting schemes for mobile ad hoc networks is a challenging task. Multicast protocols typically construct a ...

Adaptive Scheduling for Multicasting Hard Deadline ...
tructure support, scalable compression techniques are used to allow the .... that the transmitter is an oracle which knows the channel ..... global optimal solution.

Efficient Layer-2 Multicasting for IEEE 802.11s ... - Semantic Scholar
multi-player gaming through the internet connection has increased ... network to the exterior Internet. .... destination address to distinguish the packet type.

Wide-Area Multicasting based on Flexcast: Toward the ...
3 Makuhari Gigabit Research Center, TAO. 1-9-1 Nakase, Mihama-ku, ... that our proposed system suits wide-area multicasting and that the prototype system ...

Cheap Besegad Eu Plug Digital Programmable Timer Socket Switch ...
Cheap Besegad Eu Plug Digital Programmable Timer So ... ctronic Devices Free Shipping & Wholesale Price.pdf. Cheap Besegad Eu Plug Digital ...

Cheap Phone App Control Wireless Timer Socket Mini Switch Wifi ...
Cheap Phone App Control Wireless Timer Socket Mini S ... Power Wifi Plug Free Shipping & Wholesale Price.pdf. Cheap Phone App Control Wireless Timer ...

Efficient Layer-2 Multicasting for IEEE 802.11s ... - Semantic Scholar
multi-player gaming through the internet connection has .... When IP layer multicast address. 110 ... The lower 23 bits of the IP multicast address are directly.

Distributed Utility Maximization for Network Coding Based Multicasting ...
wireless network using network coding have been formulated in [20], [21] ..... [3] T. Ho, R. Koetter, M. Médard, D. R. Karger, and M. Effros, “The benefits of coding ...

Cheap Orico Black Hpc-6A5U-Eu Surge Protection Power Socket ...
Cheap Orico Black Hpc-6A5U-Eu Surge Protection Powe ... nic Power Strip Free Shipping & Wholesale Price.pdf. Cheap Orico Black Hpc-6A5U-Eu Surge ...

man-29\best-1150-socket-motherboard.pdf
Connect more apps... Try one of the apps below to open or edit this item. man-29\best-1150-socket-motherboard.pdf. man-29\best-1150-socket-motherboard.pdf.

Cheap Cordless Portable 6 Outlet Extension Socket Power Strip ...
Cheap Cordless Portable 6 Outlet Extension Socket Po ... s Power Adaptors Free Shipping & Wholesale Price.pdf. Cheap Cordless Portable 6 Outlet Extension ...