network programming. how to do? q: 早期網路硬體的規格通常沒有一定的標...

37
Network Programming

Upload: ethelbert-sims

Post on 04-Jan-2016

217 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Network Programming

Page 2: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

How to do?

• Q:早期網路硬體的規格通常沒有一定的標準,因此開發網路應用程式必須針對不同的網路硬體規格撰寫,相對地其難度亦較高,也較不經濟。是否有一應用程式介面是介於應用程式與硬體之間,並提供應用程式介面以符合不同的網路硬體規格呢?

• A: Socket Interface

Page 3: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Socket Interface

• 最早的 Socket Interface 是於 1980 年代,由加州柏克萊大學為支援 UNIX 作業系統上的 TCP/IP 應用所開發的 Socket 介面,稱為 BSD Socket 。(BSD: Berkeley Software Distribution)

Page 4: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Different Sockets

• BSD Socket

• WinSock (Windows Socket)– Microsoft 公司為 Windows 系統制定的 TCP/I

PAPI (Application Programming Interface)

• Java Socket– Sun Microsystems 公司為 Java 制定的 TCPI

PAPI

Page 5: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

We choose Java Socket

Because Java is

• Platform Independent(write once, run anywhere)

• Object-Oriented

Page 6: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Write once, run anywhere

Page 7: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java – Object Oriented

- A class inherits state and behavior from its superclass.- A subclass can define additional variables and methods.-A subclass can override methods of superclass (e.g., change gear method might be changed if an additional gear is provided.)- Can have more than one layer of hierarchy

Page 8: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java History

• 1991 年, Sun Microsystem 公司開始進行一個稱為 Green 的計畫,希望開發出可以控制智慧型家電產品的新程式語言,由JamesGosling 領導,並開始將語言命名為 Oak ,之後又命名為 Java 。

• Green 計畫一開始試著擴展 C++ 的功能,但在技術上碰到一些困難,使得 Green 計畫幾乎面臨取消的命運, 1993 年全球資訊網 WWW 的崛起,使得 Green 計畫獲得一線生機。

• Green 計畫建議將 Java 應用於 WWW ,建立所謂動態的內容( dynamic content ),並於 1995 年 5 月 23 日於一個國際會議上發表 Java 語言和它的瀏覽器 Hot Java ,延續世人對全球資訊網的熱度, Java 語言立即成為各方矚目的焦點。

• Microsoft 微軟公司於 1995 年 11 月 7 日取得 Java 使用授權。

Page 9: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket?

• 從網路的角度: 通訊連結的端點

• 從程式設計者的角度: 撰寫網路通訊程式的 API

Page 10: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

Page 11: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

• 讓網路應用程式可以取得 Transport Layer的服務:

Application Layer

Transport Layer

Socket Interface

Application Layer

Transport Layer

Socket Interface

Host1 Host2

Page 12: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

• Provides an abstraction for interprocess communication

Page 13: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

Figure 2.6-1: Processes communicating through TCP sockets

The application developer has the ability to fix a few TCP parameters, such as maximum buffer and maximum segment sizes.

Page 14: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)• It is an API between applications and network

protocol software provided by the OS• Functions it provides:

– Define an “end- point” for communication– Initiate and accept a connection– Send and receive data– Terminate a connection gracefully

• All network applications use sockets at some level, often using higher level protocols on top of sockets– File transfer apps (FTP), Web browsers– (HTTP), Email (SMTP/ POP3), etc…

Page 15: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

•The combination of an IP address and a port number. (RFC 793 ,original TCP specification)

•The name of the Berkeley-derived application programming interfaces (APIs) for applications using TCP/IP protocols.

Page 16: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

• A socket is a communication endpoint — an object through which an application sends or receives packets of data across a network.

• The purpose is to abstract away the underlining network

Page 17: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

• The combination of an IP address and a port number.

• A socket provides an interface to send data to/from the network through a port.

Page 18: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Hosts

• Each host machine has an IP address

medellin.cs.columbia.edu

(128.59.21.14)

cluster.cs.columbia.edu

(128.59.21.14, 128.59.16.7, 128.59.16.5, 128.59.16.4)

newworld.cs.umass.edu

(128.119.245.93)

Page 19: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Ports

Port 0

Port 1

Port 65535

• Each host has 65,536 ports

• Some ports are reserved for specific apps– 20,21: FTP– 23: Telnet– 80: HTTP– see RFC 1700 (about

2000 ports are reserved)

Page 20: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)•Socket pair

–Specified the two end points that uniquely identifies each TCP connection in an internet.

–4-tuple: (client IP address, client port number, server IP address, server port number)

Page 21: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

A server runs on a specific computer and has a socket that is bound to a specific port number.

A client makes a connection request based on the host name of the server and the port number.

Page 22: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

What is a socket? (Cont)

Upon acceptance, the server gets a new socket bound to a different port.

If the connection is accepted, a socket is successfully created and the client can use the socket to communicate with the server.

Page 23: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Client- Server communication (TCP)

socket()

bind()

listen()

accept()

read()

write()

read()

close()

Socket()

connect()

write()

read()

close()

TCP Client

TCP ServerWell-known port

blocks until connection from client

process request

Connection establishment

Data(request)

Data(reply)

End-of-file notification

Page 24: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Types of Sockets• Two different types of sockets :

– stream vs. datagram• Stream socket :( i.e. connection- oriented socket)

– It provides reliable, connected networking service– Error free; no out- of- order packets (uses TCP)– applications: telnet/ ssh, http, …

• Datagram socket :( i.e. connectionless socket)– It provides unreliable, best- effort networking service– Packets may be lost; may arrive out of order (uses UDP)– applications: streaming audio/ video (realplayer), …

Page 25: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java Network Socket Classes

• Java provides three socket classes for TCP/IP connection-oriented and connectionless services.

• Socket class and ServerSocket class are used for connection-oriented service.– Socket class provides a (client-side) outgoing reliable, ord

ered stream connection service.– ServerSocket class provides a (server-side) incoming reli

able, ordered stream connection service.

• DatagramSocket class is used for connectionless service.

Page 26: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java socket programming

• Major Types of SocketsServerSocketSocket

DatagramSocketMulticastSocket

To use the above socket class, the following package are needed to importi.e. import java.net.*;

TCP

UDP

Page 27: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Network Layers

Application LayerTCP

Internet Protocol (IP)Physical Layer

UDP

Page 28: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Client/Server Connection-oriented Applicationusing JAVA Socket/ServerSocket

Create a User Interface

ClientServer

Create a Socket

(with server host address & port #)

Close the socket

Spawn a new thread to serve the client

Receive & send back streams

Accept new connection(with a new socket)

listen to the connection request

Acquire & send date streams

(continue until done)

Close the socket

ExitExit

Thread

Create a ServerSocket

Connectattempt

Exchangedata

Disconnect

Page 29: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Peer-to-Peer Connectionless Applicationusing JAVA DatagramSocket

Create User Interface

Sender/Receiver

Create a DatagramSocket

Create a DatagramPacket(with receiver host address &

port #)

Close the datagram socket

Exit

ExchangedataSend/Receive datagram packet

(continue until done)

Exit

Create User Interface

Receiver/Sender

Create a DatagramSocket

Create a DatagramPacket(with sender host address &

port #)

Receive/Send datagram packet(continue until done)

Close the datagram socket

Page 30: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java Thread

• Methods– Thread.start() 啟動執行緒的運作 ( 啟動 run() method)– Thread.run() 執行緒會執行到 run() method 執行完為止– Thread.sleep() 告訴目前的執行緒停止多少毫秒– Thread.stop() 可用於停止一執行緒的執行– Thread.suspend() 可用於暫停此執行緒的執行– Thread.resume() 繼續執行一被暫停的執行緒– Thread.yield() 將這個執行緒所分配到的 time slice 讓給

其他執行緒 , 但此時若無其他執行緒就無效

Page 31: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

The Life Cycle of a Thread

Page 32: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Two ways to create a thread

• Subclassing Thread & Overriding run method

• Implementing the Runnable Interface

Page 33: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Subclassing Threadpublic class SimpleThread extends Thread { public SimpleThread(String str) { super(str); } public void run() {

// the code of the thread are put in here}

}public class TwoThreadsTest { public static void main (String[] args) { new SimpleThread(“1st Thread").start(); new SimpleThread(“2nd Thread").start(); }}

Subclassing Thread

You have to implement method run()

Using start() to run the thread

Page 34: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Implementing the Runnable Interface

public class Clock extends Applet implements Runnable { private Thread clockThread = null; public void start() {

if (clockThread == null) { clockThread = new Thread(this, “Clock”); clockThread.start(); } public void run() {

// the code of the thread are put in here}

}

Implementing Runnable

Interface

Using start() to run the thread

You have to implement method run()

Page 35: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java TCP serverimport java.io.*;import java.net.*;public class KnockKnockServer { public static void main(String[] args) throws IOException { ServerSocket serverSocket = null; try { serverSocket = new ServerSocket(1234); } catch (IOException e) { System.err.println("Could not listen on port: 1234."); System.exit(1); } Socket clientSocket = null; try { clientSocket = serverSocket.accept(); } catch (IOException e) { System.err.println("Accept failed."); System.exit(1); }

Input the bind port number and create the socket

Wait for connection

Page 36: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java TCP server

PrintWriter out = new PrintWriter(clientSocket.getOutputStream(), true); BufferedReader in = new BufferedReader( new InputStreamReader(clientSocket.getInputStream())); while ((inputLine = in.readLine()) != null) { out.println(outputLine); } out.close(); in.close(); clientSocket.close(); serverSocket.close(); }}

Get the socket's input, output stream &open readers, writers on them.

Communicate with the client by readingfrom and writing to the socket

Close the sockets

Page 37: Network Programming. How to do? Q: 早期網路硬體的規格通常沒有一定的標 準,因此開發網路應用程式必須針對不 同的網路硬體規格撰寫,相對地其難度

Java TCP clientpublic class KnockKnockClient { public static void main(String[] args) throws IOException { kkSocket = new Socket("localhost", 1234); out = new PrintWriter(kkSocket.getOutputStream(), true); in = new BufferedReader(new InputStreamReader(kkSocket.getInputStream())); while ((fromServer = in.readLine()) != null) { out.println(fromUser); }

out.close(); in.close(); stdIn.close(); kkSocket.close(); }}

Connect to the server

Get the socket's input,output stream & open

readers, writers on them.

Communicate with the client by readingfrom and writing to the socket

Close the sockets