intTypePromotion=1
zunia.vn Tuyển sinh 2024 dành cho Gen-Z zunia.vn zunia.vn
ADSENSE

Lập trình Socket với Java

Chia sẻ: Vũ Văn Hải | Ngày: | Loại File: PDF | Số trang:6

352
lượt xem
119
download
 
  Download Vui lòng tải xuống để xem tài liệu đầy đủ

Truyền tin với giao thức UDP Datagram Sockets Ví dụ về máy chủ/khách UDP...

Chủ đề:
Lưu

Nội dung Text: Lập trình Socket với Java

  1. 12/6/2007 Nội dung bài học Lớp InetAddress Lập trình Socket với Java Truyền tin với giao thức TCP TCP Sockets Ví dụ về máy chủ/khách TCP Truyền tin với giao thức UDP Datagram Sockets Ví dụ về máy chủ/khách UDP 1 2 Network Programming Network Programming Các classes trong gói java.net Exceptions in Java Gói java.net chứa các classes cho phép thực hiện lập trình BindException mạng ConnectException ContentHandler DatagramPacket MalformedURLException DatagramSocket InetAddress NoRouteToHostException MulticastSocket ServerSocket ProtocolException Socket SocketImpl SocketException URL URLConnection UnknownHostException URLEncoder UnknownServiceException URLStreamHandler 3 4 Network Programming Network Programming Lớp InetAddress import java.net.*; import java.io.*; Xử lý địa chỉ Internet theo tên và địa chỉ IP public class IPFinder { Các hàm chuyển đổi tên/địa chỉ: public static void main(String[] args) throws IOException /* trả về một đối tượng kiểu InetAddress*/ { String host; public static InetAddress getByName(String host) throws BufferedReader input = UnknownHostException new BufferedReader( /* trả về chuỗi đối tượng kiểu InetAddress*/ new InputStreamReader(System.in)); public static InetAddress[] getAllByName(String host) throws System.out.print("\n\nEnter host name: "); UnknownHostException host = input.readLine(); /* c chu i ký t nh p t bàn phím*/ public static InetAddress getLocalHost() throws UnknownHostException try { public boolean isMulticastAddress() InetAddress address = InetAddress.getByName(host); public String getHostName() /*trả về tên miền*/ System.out.println("IP address: " + address.toString()); } public byte[] getAddress() /*trả về địa chỉ IP dạng chuỗi byte*/ catch (UnknownHostException e) public String getHostAddress() /*trả về địa chỉ IP dạng ký tự*/ { public int hashCode() System.out.println("Could not find " + host); } public boolean equals(Object obj) } public String toString() } 5 6 Network Programming Network Programming 1
  2. 12/6/2007 Truyền tin với giao thức TCP Lấy địa chỉ của máy chủ import java.net.*; TCP server public class MyLocalIPAddress TCP client ServerSocket () { socket() public static void main(String[] args) { ServerSocket. try Connection accept() request { connect() InetAddress address = InetAddress.getLocalHost(); BufferedReader. System.out.println (address.toString()); data (request) readLine() } write() catch (UnknownHostException e) Process request { Wait next System.out.println("Could not find local address!"); request PrintWriter. } data (reply) println() read() } } BufferedReader. EOF readLine() close() ServerSocket. close() 7 8 Network Programming Network Programming Lớp Java.net.Socket The Java.net.Socket Class (2) Lớp cơ bảncủa Java để thực hiện truyền tin TCP phía Gửi và nhận dữ liệu được thực hiện thông qua dòng dữ liệu xuất/nhập máy khách Có một số hàm để lấy đối tượng là dòng nhập cho một socket và dòng xuất cho socket đó. Thiết lập hoặc ngắt kết nối và thiết lập các tùy chọn socket public InputStream getInputStream() throws IOException Kết nối được thiết lập khi khởi tạo đối tượng public OutputStream getOutputStream() throws IOException Lấy thông tin về một Socket Mỗi đối tượng Socket được gán với một máy chủ duy nhất public InetAddress getInetAddress( ) Để kết nối với một máy chủ khác, phải tạo ra một đối tượng public int getPort( ) Socket mới public int getLocalPort( ) public InetAddress getLocalAddress( ) public Socket(String host, int port) throws UnknownHostException, Đóng socket: IOException public void close() throws IOException public Socket(InetAddress address, int port) throws IOException public void shutdownInput( ) throws IOException // Java 1.3 public Socket(String host, int port, InetAddress localAddress, int public void shutdownOutput( ) throws IOException // Java 1.3 localPort) public boolean isInputShutdown( ) // Java 1.4 throws IOException public boolean isOutputShutdown( ) // Java 1.4 public Socket(InetAddress address, int port, InetAddress localAddress, int localPort) throws IOException 9 10 Network Programming Network Programming TCP Sockets Ví dụ: DaytimeClient.java MÁY KHÁCH: import java.net.*; import java.io.*; n máy ch 1. Thi t l p k t n i public class DaytimeClient { Socket link = public static void main(String[] args) { String hostname; new Socket(inetAddress.getLocalHost(),1234); int port; if (args.length > 0) { Thi t l p các dòng xu t/nh p d li u 2. hostname = args[0]; port = Integer.parseInt(args[1]); G i và nh n d li u 3. } else { óng k t n i hostname = "time.nist.gov"; 4. port = 13; } 11 12 Network Programming Network Programming 2
  3. 12/6/2007 Lớp Java.net.ServerSocket Example: DaytimeClient.java (2) L p java.net.ServerSocket bao g m try { Các hàm kh i t o i tư ng ServerSocket Socket theSocket = new Socket(hostname, port); Các hàm ch k t n i InputStream timeStream = theSocket.getInputStream( ); StringBuffer time = new StringBuffer( ); Các hàm thi t l p các lo i tùy ch n socket máy ch int c; Các hàm thư ng dùng khác như toString( ) while ((c = timeStream.read( )) != -1) Có b n hàm kh i t o ServerSocket cho phép thi t l p time.append((char) c); String timeString = time.toString( ).trim( ); c ng, kích thư c hàng i c a các yêu c u k t n i và System.out.println("It is " + timeString + " at " + hostname); network interface gán cho ti n trình máy ch } // end try catch (UnknownHostException ex) { public ServerSocket(int port) throws IOException System.err.println(ex); public ServerSocket(int port, int backlog) throws IOException } public ServerSocket(int port, int backlog, InetAddress bindAddr) catch (IOException ex) { System.err.println(ex); throws IOException } public ServerSocket( ) throws IOException // Java 1.4 } // end main } // end DaytimeClient 13 14 Network Programming Network Programming TCP Sockets Lớp Java.net.ServerSocket - Chấp nhận và đóng kết nối MÁY CH : T om t i tư ng ServerSocket public Socket accept() throws IOException 1. ServerSocket servSocket = new ServerSocket(1234); D ng th c hi n c a ti n trình và i k t n i t ưa máy ch vào tr ng thái ch 2. máy khách Socket link = servSocket.accept(); Khi có m t máy khách k t n i n, hàm accept( ) Thi t l p các dòng xu t/nh p d li u 3. s tr v m t i tư ng Socket G i và nh n d li u 4. public void close() throws IOException out.println(awaiting data…); óng socket máy ch và gi i phóng c ng ch String input = in.readLine(); óng k t n i 5. link.close() 15 16 Network Programming Network Programming Thiết lập dòng xuất/nhập dữ liệu Ví dụ về máy chủ TCP Echo Khi m t socket ư c k t n i import java.net.*; // need this for InetAddress, Socket, ServerSocket import java.io.*; // need this for I/O stuff chúng ta có th g i d li u thông qua m t dòng xu t d li u chúng ta có th nh n d li u thông qua m t dòng nh p d li u public class TCPEchoServer { static final int BUFSIZE=1024; // define a constant used as size of buffer S d ng hàm getInputStream and getOutputStream of class static public void main(String args[]) { Socket thi t l p dòng xu t/nh p d li u if (args.length != 1) { throw new IllegalArgumentException("Must specify a port!"); BufferedReader in = } new BufferedReader( int port = Integer.parseInt(args[0]); try { new InputStreamReader(link.getInputStream())); ServerSocket ss = new ServerSocket(port); // Create Server Socket (passive socket) PrintWriter out = while (true) { new PrintWriter(link.getOutputStream(),true); Socket s = ss.accept(); handleClient(s); } } catch (IOException e) { System.out.println("Fatal I/O Error !"); System.exit(0); } } 17 18 Network Programming Network Programming 3
  4. 12/6/2007 Ví dụ về máy chủ TCP Echo(2) Lớp java.net.DatagramPacket static void handleClient(Socket s) throws IOException { Bi u di n các gói d li u UDP byte[] buff = new byte[BUFSIZE]; int bytesread = 0; Cung c p các hàm // print out client's address L y và thi t l p a ch ích/ngu n t /vào tiêu IP System.out.println("Connection from " + s.getInetAddress().getHostAddress()); L y và thi t l p c ng giao ti p ích/ngu n // Set up streams Nh n và thi t l p gói d li u UDP InputStream in = s.getInputStream(); OutputStream out = s.getOutputStream(); // read/write loop while ((bytesread = in.read(buff)) != -1) { out.write(buff,0,bytesread); } s.close(); } } 19 20 Network Programming Network Programming Hàm khởi tạo DatagramPacket Các hàm DatagramPacket V i bên nh n: byte[] getData(); DatagramPacket(byte[] buf, int len); void setData(byte[] buf); a ch ích V i bên g i: void setAddress(InetAddress a); DatagramPacket( byte[] buf, int len void setPort(int port); InetAddress a, int port); InetAddress getAddress(); Có th là a int getPort(); ch /c ng ngu n/ ích 21 22 Network Programming Network Programming Gửi và nhận gói dữ liệu UDP Lớp DatagramSocket T o datagram socket nh n DatagramPacket. public void send(DatagramPacket dp) throws IOException Không có phân bi t gi a socket máy khách và socket G i gói d li u UDP v i i tư ng ki u DatagramPacket ư c máy ch t o ra M t DatagramSocket có th g i cho nhi u a ch public void receive(DatagramPacket dp) throws IOException ích khác nhau. Nh n gói d li u UDP và lưu l i t i i tư ng ki u DatagramPacket ư c t o ra t trư c ích ư c lưu t i DatagramPacket a ch public void close( ) public DatagramSocket() throws SocketException Gi i phóng c ng ang oc s d ng b i socket ó public DatagramSocket(int port) throws public int getLocalPort( ) SocketException Tr v s hi u c ng mà socket ang s d ng public DatagramSocket(int port, InetAddress laddr) public InetAddress getLocalAddress( ) throws SocketException Tr v a ch IP mà socket ang s d ng 23 24 Network Programming Network Programming 4
  5. 12/6/2007 Điều khiển kết nối – với Java 1.2 Các bước thiết lập truyền tin UDP - MÁY CHỦ Kh i t o m t i tư ng ki u DatagramSocket 1. public void connect(InetAddress host, int port) DatagramSocket dgramSocket = G i và nh n gói tin t m t i ch IP và c ng ư c nh trư c new DatagramSocket(1234); Không gi ng như k t n i TCP T o buffer cho dòng d li u nh p 2. public void disconnect( ) byte[] buffer = new byte[256]; public int getPort( ) T o i tư ng ki u DatagramPacket cho dòng d li u nh p 3. public InetAddress getInetAddress( ) DatagramPacket inPacket = new DatagramPacket(buffer, buffer.length); public InetAddress getRemoteSocketAddress( ) // Java 1.4 Ch dòng d li u nh p 4. dgramSocket.receive(inPacket) 25 26 Network Programming Network Programming Các bước thiết lập truyền tin UDP Các bước thiết lập truyền tin UDP - MÁY CHỦ(2) – Máy khách (1) L y a ch và c ng c a bên g i t gói tin nh n ư c 5. T o i tư ng ki u DatagramSocket 1. InetAddress clientAddress = inPacket.getAddress(); DatagramSocket dgramSocket = new DatagramSocket; int clientPort = inPacket.getPort(); T o gói d li u UDP xu t L y d li u t buffer 6. 2. string message = DatagramPacket outPacket = new DatagramPacket( new String(inPacket.getData(), 0, inPacket.getLength()); message.getBytes(), T o gói d li u UDP xu t 7. message.length(), DatagramPacket outPacket = host, port); new DatagramPacket( G i gói d li u response.getBytes(), response.length(), 3. dgramSocket.send(outPacket) clientAddress, clientPort); G i gói d li u T o buffer cho d li u nh p 8. 4. dgramSocket.send(outPacket) byte[] buffer = new byte[256]; óng DatagramSocket: 9. dgramSocket.close(); 27 28 Network Programming Network Programming Ví dụ về máy chủ UDP Các bước thiết lập truyền tin UDP – Máy khách (2) import java.net.*; import java.io.*; T o i tư ng ki u DatagramPacket cho gói d li u nh p 5. DatagramPacket inPacket = public class UDPDiscardServer { new DatagramPacket(buffer, buffer.length); public final static int DEFAULT_PORT = 9; public final static int MAX_PACKET_SIZE = 65507; Nh n gói d li u nh p 6. public static void main(String[] args) { dgramSocket.receive(inPacket) int port = DEFAULT_PORT; L y d li u t buffer byte[] buffer = new byte[MAX_PACKET_SIZE]; 7. string response = new String(inPacket.getData(), 0, try { port = Integer.parseInt(args[0]); inPacket.getLength()); } óng DatagramSocket: 8. catch (Exception ex) { dgramSocket.close(); // use default port } 29 30 Network Programming Network Programming 5
  6. 12/6/2007 Ví dụ về máy chủ UDP(2) Ví dụ về máy kháchUDP import java.net.*; try { import java.io.*; DatagramSocket server = new DatagramSocket(port); DatagramPacket packet = new DatagramPacket(buffer, buffer.length); public class UDPDiscardClient { while (true) { public final static int DEFAULT_PORT = 9; try { public static void main(String[] args) { server.receive(packet); String hostname; String s = new String(packet.getData( ), 0, packet.getLength( )); int port = DEFAULT_PORT; System.out.println(packet.getAddress( ) + " at port " + packet.getPort( ) + " says " + s); if (args.length > 0) { packet.setLength(buffer.length); // reset the length for the next packet hostname = args[0]; } try { catch (IOException ex) { port = Integer.parseInt(args[1]); System.err.println(ex); } } catch (Exception ex) { } // end while // use default port } // end try } catch (SocketException ex) { } System.err.println(ex); else { } // end catch hostname = "localhost"; } // end main } } 31 32 Network Programming Network Programming Ví dụ về máy khách UDP(2) try { InetAddress server = InetAddress.getByName(hostname); BufferedReader userInput = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket theSocket = new DatagramSocket( ); while (true) { String theLine = userInput.readLine( ); if (theLine.equals(".")) break; byte[] data = theLine.getBytes( ); DatagramPacket theOutput = new DatagramPacket(data, data.length, server, port); theSocket.send(theOutput); } // end while } // end try catch (UnknownHostException uhex) { System.err.println(uhex); } catch (SocketException socex) { System.err.println(socex); } catch (IOException ioex) { System.err.println(ioex); } } // end main } 33 Network Programming 6
ADSENSE

CÓ THỂ BẠN MUỐN DOWNLOAD

 

Đồng bộ tài khoản
2=>2