Socket程式设计以JAVA为范例答辩课件_第1页
Socket程式设计以JAVA为范例答辩课件_第2页
Socket程式设计以JAVA为范例答辩课件_第3页
Socket程式设计以JAVA为范例答辩课件_第4页
Socket程式设计以JAVA为范例答辩课件_第5页
已阅读5页,还剩70页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Socket 程式設計:以JAVA為範例Jen-Chu Liuikiyama.tw第1页,共75页。教學主旨讓各位了解網際網路程式運作方式與設計方法了解socket programming熟悉Client/Server程式設計架構利用Java作為範例程式第2页,共75页。大綱TCP/IP 與 PortSocket介紹BSD socketMicrosoft Windows socketJava SocketServer端Socket程式架構Client端Socket程式架構第3页,共75页。TCP/IP與Port第4页,共75页。TCP/IPTCP Transport Control Proto

2、col是一種連線型(connection oriented)和可靠性(reliable)的傳輸通訊協定。IP-Internet Protocol可以用來代表主機位址HOSTHOSTsendreceivesendreceiveIP1IP2第5页,共75页。Port (通訊埠)通訊協定通常是以port來區隔Internet各個應用服務的.通常有16bits代表216=65536種編號11023是保留號(公認)所以programming時要注意第6页,共75页。Port (通訊埠)(續)PortServiceProtocol說明20FTP-DataTCPFile Transport Protocol

3、-Data21FTPTCPFile Transport Protocol23TelnetTCPTelnet Service25SMTPTCPSimple Mail Transfer Protocol80HTTPTCPHyperText Transfer Protocol110POP3TCPPost Office Protocol-version 3第7页,共75页。Port (通訊埠)(續)Client端要和Server端連線的時候,同樣需要使用通訊埠與Server端連結,但是所使用的意義不同.埠號也不一定要相同.會用一個隨機暫時的號碼,用完後釋放.在win2000下可以用 “netstat

4、an”指令查看.第8页,共75页。Port (通訊埠)(續)Linux/Unix:/etc/servicesWin2000: C:WINNTSystem32DriversetcServices第9页,共75页。SocketBerkeley SocketMicrosoft Windows SocketJava Socket第10页,共75页。什麼是Socket?是一種應用程式介面(Interface).介於應用程式與硬體之間,並提供標準的函式以符合不同的網路硬體規格.不同的作業系統或應用程式所使用的Socket會有一些差異.第11页,共75页。Berkeley Socket是最早的Socket

5、Interface由加州的柏克萊大學所發展出來的是一組介面函式,介於應用程式與硬體之間.提供標準的函式,應用程式透過呼叫Socket Interface,以發展具備有TCP/IP網路功能之應用.第12页,共75页。Berkeley Socket (續)ApplicationSocket APITCPUDPNetwork第13页,共75页。Berkeley Socket (續)所提供的Server端的API函式:ServerBSD Socket說明socket建立socketbind設定socket所使用的local端IP位址與通訊埠listen設定socket等候(listen)Client端

6、連結請求(connection request)accept接受來自Client端的連結請求,並且建立socket連結recvread(TCP)接收來自Client端所傳來的資料recvfrom(UDP)接收來自Client端所傳來的資料sendwrite(TCP)傳送資料至Client端sendto(UDP)傳送資料至Client端closesocket關閉通訊連結及socket,並且釋放系統資源shutdown關閉socket的傳送與接收的功能第14页,共75页。Berkeley Socket (續)所提供的Client端的API函式:ClientBSD Socket說明socket建立s

7、ocketconnect建立與Server端的socket連線recvread(TCP)接收來自Server端所傳來的資料recvfrom(UDP)接收來自Server端所傳來的資料sendwrite(TCP)傳送資料至Server端sendto(UDP)傳送資料至Server端closesocket關閉通訊連結及socket,並且釋放系統資源shutdown關閉socket的傳送與接收的功能第15页,共75页。Berkeley Socket (續)Berkeley Socket在網路應用程式開發上,大致有下列兩大類:Stream Socket (Connection-Oriented Pro

8、tocol)Datagram Socket (connectionless Protocol)第16页,共75页。Berkeley Socket (續)Stream Socket在Server端的開發流程Socket()Bind()Listen()Accept()Closesocket()Clientrecv() / read()send() / write()第17页,共75页。Berkeley Socket (續)Stream Socket在Client端的開發流程Socket()Connect()Closesocket()Serverrecv() / read()send() / wri

9、te()第18页,共75页。Berkeley Socket (續)Datagram Socket程式開發流程Socket()Bind()Closesocket()Sendto()Recvfrom()第19页,共75页。Microsoft Windows Socket是Microsoft以BSD socket API為基礎所發展出來的,又稱為Winsock可以分成四大部分BSD socket APIWinsock延伸(extended)函數轉換(conversion)函數資料庫(Database)函數第20页,共75页。Microsoft Windows Socket (續)Applicatio

10、nWindows Socket APIWinsock.dllWsock32.dllWs2_32.dllTCPUDPNetwork第21页,共75页。Microsoft Windows Socket (續)Winsock API版本相容性Winsock應用程式Winsock.dll (16bit)Wsock32.dll (32bit)Ws2_32.DLL (32bit)TCP/IPNetworkWinsock應用程式Winsock 2.0Winsock 1.1第22页,共75页。Microsoft Windows Socket (續)BSD Socket API:這部分的功能已經慢慢被Winso

11、ck延伸函數所取代BSD Socket API說明socket建立socketbind設定socket所使用的local端IP位址與通訊埠listen設定socket等候(listen)Client端連結請求(connection request)accept接受來自Client端的連結請求,並且建立socket連結recv接收來自另一socket所傳來的資料recvfrom接收來自另一socket所傳來的資料,並且回傳此socket的資訊send傳送資料至另一socketSendto傳送資料至指定IP位址及通訊埠closesocket關閉通訊連結及socket,並且釋放系統資源shutdow

12、n關閉socket的傳送與接收的功能第23页,共75页。Microsoft Windows Socket (續)BSD Socket API(續):BSD Socket API說明connect建立socket之間的連線getpeername回傳socket所連結的remote端IP位址與通訊埠getsockname回傳socket所連結的local端IP位址與通訊埠getsockopt回傳socket的選項值ioctlsocket設定或回傳socket參數值select設定socket的讀寫狀態並且執行同步的I/O傳輸setsockopt設定socket的選項值第24页,共75页。Micro

13、soft Windows Socket (續)Winsock延伸函數因應多工(multi-task),事件導向(event-driven)與訊息導向(message-driven)所發展的API函數函數名稱均以WSA開頭第25页,共75页。Microsoft Windows Socket (續)Winsock延伸函數Winsock Extended API說明WSAAcceptaccept的延伸winsock API,接受來自Client端的連結請求,並且建立socket連結WSARecvrecv的延伸winsock API,接收來自另一socket所傳來的資料WSARecvfromrecvf

14、rom的延伸winsock API,接收來自另一socket所傳來的資料,並且回傳此socket的資訊WSASendsend的延伸winsock API,傳送資料至另一socketWSASendtosendto的延伸winsock API,傳送資料至指定IP位址及通訊埠WSAConnectconnect的延伸winsock API,建立socket之間的連線WSASelectselect的延伸winsock API,設定socket的讀寫狀態並且執行同步的I/O傳輸第26页,共75页。Microsoft Windows Socket (續)Winsock延伸函數: 與Event有關的APIWi

15、nsock Extended API說明WSACloseEvent關閉winsock事件WSACreatEvent建立winsock事件WSAEnumNetworkEvents回傳目前所有的winsock事件WSAResetEvent更新winsock事件WSASetEvent設定winsock事件WSAWaitForMultipleEvents等待正在blocking的winsock事件第27页,共75页。Microsoft Windows Socket (續)Winsock延伸函數: 新增的socket APIWinsock Extended API說明WSACleanup釋放所使用的wi

16、nsockWSADuplicateSocket建立虛擬(virtual)的winsockWSAEnumProtocols回傳所有的通訊協定之資訊WSAGetLastError回傳Windows所產生的最新的winsock錯誤代碼WSASetLastError設定winsock錯誤代碼WSAStartup建立Socket第28页,共75页。Microsoft Windows Socket (續)Winsock轉換 (Conversion)函數主要用來做不同位元間的位元順序轉換Host Byte Order (主機位元順序)Network Byte Order (網路位元順序) address A

17、+1 address Alittle-endian byte order:high-order bytelow-order bytebig-endian byte order:high-order bytelow-order byte(for a 16-bit integer) address A address A+1第29页,共75页。Microsoft Windows Socket (續)Winsock轉換函數Winsock Extended APIBSD Socket API說明WSAHtonlHtonl將32位元長整數(long integer)從host byte order轉成n

18、etwork byte orderWSAHtonsHtons將16位元長整數(long integer)從host byte order轉成network byte orderWSANtohlNtohl將32位元長整數(long integer)從network byte order轉成host byte orderWSANtohsNtohs將16位元長整數(long integer)從network byte order轉成host byte orderInet_addr將IP位址字串轉換為32位元IP位址Inet_ntoa將32位元IP位址轉換為IP位址字串第30页,共75页。Micros

19、oft Windows Socket (續)Winsock資料庫函數其實與實際資料庫無關主要在處理IP Address與主機名稱(domain name)間的轉換也可以用來取得通訊協定(protocol)或通訊埠(port)的相關資訊第31页,共75页。Microsoft Windows Socket (續)Winsock資料庫函數BSD Socket API說明gethostbyaddr以主機IP位址取得主機的相關資訊gethostbyname以主機名稱取得主機的相關資訊gethostname取得local主機名稱getprotobyname以通訊協定的名稱取得通訊協定的相關資訊getpro

20、tobynumber以通訊協定的號碼取得通訊協定的相關資訊getservbyname以服務的名稱取得服務的相關資訊getservbyport以服務的通訊埠及通訊協定取得服務的相關資訊第32页,共75页。Microsoft Windows Socket (續)Winsock資料庫函數Winsock Extended API說明WSAAsyncGethostbyaddr以主機IP位址取得主機的相關資訊WSAAsyncGethostbyname以主機名稱取得主機的相關資訊WSAAsyncgethostname取得local主機名稱WSAAsyncGetprotobyname以通訊協定的名稱取得通訊協

21、定的相關資訊WSAAsyncGetprotobynumber以通訊協定的號碼取得通訊協定的相關資訊WSAAsyncGetservbyname以服務的名稱取得服務的相關資訊WSAAsyncGetservbyport以服務的通訊埠及通訊協定取得服務的相關資訊第33页,共75页。Microsoft Windows Socket (續)Winsock在網路應用程式開發上,一樣可以分成:Stream Socket (Connection-Oriented Protocol)Datagram Socket (connectionless Protocol)第34页,共75页。Microsoft Windo

22、ws Socket (續)Winsock Stream Socket Client/ServerWSAStartupBindListenWSAAcceptWSACleanupWSARecv / WSASendWSASend / WSARecvConnect()WSACleanupWSAStartupServerClient第35页,共75页。Microsoft Windows Socket (續)Winsock Datagram SocketWSAStartupBindWSACleanupWSASendtoWSARecvfrom第36页,共75页。JAVA SocketJava最初設計的目的有

23、下列考量:與OS及Platform無關的程式語言跨平台(Cross Platform)物件導向(Object Oriented)增強WWW與使用者互動的模式支援Internet Programming第37页,共75页。JAVA Socket (續)Java API:J (Networking)J.ssl (Networking with Secure Socket Layer)Java.rmi (Remote Method Invocation)Javax.rmi (Remote Method Invocation for IIOP)PS: IIOP (Internet Inter-ORB

24、Protocol) ORB (Object Request Broker) 第38页,共75页。JAVA Socket (續)以J而言,其API可以分成以下幾類:處理URL處理主機名稱及IP Address處理TCP與UDP通訊協定處理網路認證(Authentication)與權限(permission)內容處理器(ContentHandler)第39页,共75页。JAVA Socket (續)處理URL的類別:InterfaceURLStreamHandlerFactoryClassJ.HttpURLConnectionJ.JarURLConnectionJ.URLJ.URLClassLoa

25、derJ.URLConnectionJ.URLDecoderJ.URLEncoderJ.URLStreamHandlerExceptionJ.MalformedURLExceptionJ.UnknownServiceException第40页,共75页。JAVA Socket (續)處理主機名稱及IP Address的類別與方法有:ClassJ.InetAddressMethodPublic byte get address()Public static InetAddress getAllByName(string host) throws UnknownHostExceptionPubli

26、c static InetAddress getByName(string host) throws UnknownHostExceptionPublic String getHostAddress()Public String getHostName()Public static InetAddress getLoaclHost() throws UnknownHostExceptionExceptionJ.UnknownHostException第41页,共75页。JAVA Socket (續)處理UDP通訊協定InterfaceDatagramSocketImplFactoryClass

27、J.DatagramPacketJ.DatagramSocketJ.DatagramSocketImplJ.MulticastSocketExceptionJ.SocketException第42页,共75页。JAVA Socket (續)處理TCP通訊協定InterfaceSocketImplFactorySocketOptionsClassJ.ServerSocketJ.SocketJ.SocketImplExceptionJ.BindExceptionJ.ConnectionExceptionJ.NoRouteToHostExceptionJ.ProtocolExceptionJ.Soc

28、ketException第43页,共75页。JAVA Socket (續)處理網路認證(Authentication)與權限(permission)ClassJ.AuthenticatorJ.NetPermissionJ.PasswordAuthenticationJ.SocketPermissionJ.SocketException第44页,共75页。JAVA Socket (續)內容處理器(ContentHandler)InterfaceContentHandlerFactoryClassJ.ContentHandlerJ.SocketException第45页,共75页。JAVA Soc

29、ket (續)J中支援Stream socket (TCP) Server端與Client端網路應用程式相關的API:Java API說明ServerJ.ServerSocket建立Server端socket及設定所使用的IP位址及通訊埠Accept等候及接受來自Client端連結請求,並且建立與Client端之連線Read(java.io.DataInputStream)接收來自Client端所傳送之資料Write(java.io.DataOutputStream)傳送資料到Clientclose關閉socket,同時也關閉與Client端連結ClientJ.Socket建立Client端s

30、ocket,並且嘗試建立與Server端的連結Read(java.io.DataInputStream)接收來自Server端所傳送之資料Write(java.io.DataOutputStream)傳送資料到Serverclose關閉socket,同時也關閉與Server端連結第46页,共75页。JAVA Socket (續)ServerSocketAcceptCloseread / sendsend / readSocketCloseServerClientJava Stream Socket第47页,共75页。JAVA Socket (續)J中支援Datagram Socket (UDP

31、) 應用程式相關的API:Java API說明J.DatagramSocket建立Datagram socketJ.DatagramPacket建立Datagram packet(資料封包)Receive (DatagramSocket)接收Datagram packet(資料封包)Send (DatagramSocket)傳送Datagram packet(資料封包)Close關閉Datagram socket第48页,共75页。JAVA Socket (續)Java Datagram SocketDatagramSocketDatagramPacketClosesendreceive第49

32、页,共75页。Server端Socket程式架構第50页,共75页。步驟建立Server端的socket,並且等候Client端的連結請求當Server端偵測到Client端的連結請求時,則接受並藉此建立Client端之socket處理來自Client端的資訊 (Request)回應給Client端 (Response)連線結束後關閉socketClientServer請求(Request)回應(Response)第51页,共75页。建立Server端socket欲建立Server端socket,可使用以下的建構子(constructor):Public ServerSocket(int po

33、rt) throws IOExceptionPublic ServerSocket(int port, int backlog) throws IOExceptionPublic ServerSocket(int port, int backlog, InetAddress bindAddr) throws IOException第52页,共75页。建立Server端socket (續)參數介紹:Port: 指定通訊端通訊埠,可為165535未被使用的號碼,若使用已使用的號碼,會產生IOException錯誤,若設為0,則會由ServerSocket自動尋找未被使用的號碼.Backlog: 表

34、示最大可以連結的Client數,預設值是50.bindAddr: 如果主機有一個以上的IP,才需要用這個參數來指定要bind的IP位址,格式為InetAddress形式.第53页,共75页。建立Server端socket (續)建立Server端socket的程式架構大致如下:Void startServer() ServerSocket serverSocket; int port = ; try serverSocket = new ServerSocket(port); catch (IOException ex) 第54页,共75页。取得Server端Socket資訊Server端so

35、cket以ServerSocket建立之後,可以使用以下方法取得Server端socket的相關資訊:Public InetAddress GetInetAddress()Public int getLocalPort()回傳所使用的通訊埠號第55页,共75页。取得Server端Socket資訊(續)GetInetAddress(): 取得Server端socket的IP及主機名稱等資訊,並以InetAddress類別形式回傳,因此可以使用InetAddress的下列方法取得Server端socket的相關資訊:Public byte getAddress()Public static Ine

36、tAddress getAllByName(String host) throws UnknownHostExceptionPublic static InetAddress GetByName(String host) throws UnknownHostExceptionPublic String getHostAddressPublic String getHostName()Public static InetAddress getLocalHost() throws UnknownHostException傳回的格式是 “ Host name / IP address”第56页,共7

37、5页。取得Server端Socket資訊(續)如果主機有一個以上的IP,可先使用getAllByName方法取得主機的所有IP,再以getHostAddress及getHostName方法分別取得個別對應的名稱位址ServerSocket serverSocket = new ServerSocket();InetAddress addrs = serverSocket.getInetAddress().getAllByName(“”);For (int i=0; i addrs.length; i+) System.out.println(addrsi.getHostName(); Syst

38、em.out.println(addrsi.getHostAddress();第57页,共75页。取得Server端Socket資訊(續)範例實作: 請利用前述的方法試寫出一個小程式可以擷取本身電腦的IP, host name資訊.第58页,共75页。接受Client端連結以ServerSocket建立Server端的socket之後,基本上Server的雛型已經具備了,接著便是等候及接受來自Client端的連線.處理Client端連線,可以使用ServerSocket類別的accept方法:Public Socket accept() throws IOException第59页,共75页。

39、接受Client端連結(續)用thread的方式為每一個Client端建立各自的執行緒ServerSocket serverSocket = new ServerSocket(port);Thread thread = new Thread(new listenClient(serverSocket);Thread.start();Class listenClient implements Runnable private ServerSocket serverSocket; private Socket clientSocket; public listenClient (ServerSoc

40、ket serverSocket) this.serverSocket = serverSocket; Public void run() try while (true) socket clientSocket = serverSocket.accept(); catch (IOException ex) 第60页,共75页。接受Client端連結(續)在建立Client端socket物件之後,同樣可以使用getInetAddress來取得所連結Client端的IP adress設計一個Server程式可以等候Client連線,並顯示Client的IP第61页,共75页。接收與傳送Serve

41、r端當Server端以accept方法建立Client端socket物件之後,便可以使用socket物件所提供的方法傳送與接收來自Client端的資料Public InputStream getInputStream() throws IOExceptionPublic OutputStream getOutputStream() throws IOException第62页,共75页。接收與傳送Server端 (續)getInputStream: 取得Client所輸入的資料流Java.io.DataInputStreamread, readBoolean, readByte, readCh

42、ar, readDoublereadFloat, readFully, readInt, readLong, readShortreadUnsignedByte, readUnsignedShort, readUTFJava.io.BufferedReaderread, readLineTry Socket clientSocket = serverSocket.accept(); BufferedReader in = new BufferedReader( new InputStreamReader(cs.getInputStream(); String inData = in.readL

43、ine(); 第63页,共75页。接收與傳送Server端 (續)getOutputStream: 取得輸出到Client端的資料流Java.io.DataOutputStreamwrite, writeBoolean, writeByte, writeBytes, writeCharwriteDouble, writeFloat, writeInt, writeLong, writeShortwriteUTFJava.io.BufferedWriterwriteTry Socket clientSocket = serverSocket.accept(); DataOutputStream

44、out = null; out = new DataOutputStream(clientSocket, getOutputStream(); out.writeUTF(); 第64页,共75页。關閉連結Server端用ServerSocket類別的close方法關閉Server端socket並釋放資源Public void close() throws IOExceptionClient端也要作喔看範例第65页,共75页。Client端Socket程式架構第66页,共75页。步驟建立Client端Socket,再建立時需指定欲連結Server端的主機名稱(或IP)與Internet服務的po

45、rt傳送特定資訊或指令至Server端接收Server端回傳的執行結果或錯誤訊息當Client端不需Server端的處理時,便關閉Socket通訊連結此外,Clinet端程式常為一般使用者所使用,因此,使用者介面(user interface)也要好好設計.第67页,共75页。建立Client端Socket欲建立Client端socket,可使用以下的建構子(constructor):Public Socket(InetAddress address, int port) throws IOExceptionPublic Socket(InetAddress address, int port, InetAdd

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论