Hướng dẫn Lập trình socket
lượt xem 66
download
Socket là một trong những phương thức giao tiếp giữa các quá trình (inter-process communication) như pipe , message queue .... Trong các ứng dụng được viết ngày nay người ta sử dụng công cụ socket này rất nhiều như các Web , FTP .... Trong phần này chúng ta sẽ xem xét vấn đề trên môi trường Windows . Bây giờ chúng ta sẽ nói rõ hơn về socket . Giả sử ta muốn thiết kế một hệ thống trao đổi file . Hệ thống này hoạt động như sau : Tất cả dữ liệu được lưu trữ trên một...
Bình luận(0) Đăng nhập để gửi bình luận!
Nội dung Text: Hướng dẫn Lập trình socket
- L p trình socket M c ñích: làm th nào ñ xây d ng các ng d ng client/server truy n d li u qua socket socket Socket API Ì ðưa ra trong BSD4.1 UNIX, 1981 Là giao di n (c a) do ng Ì Cho phép ng d ng t o ra và d ng t o ra trên máy s d ng socket tr m, qu n lý b i OS qua Ì Nguyên lý client/server ñó các ng d ng có th g i Ì Có hai d ng socket và nh n thông ñi p ñ n/t các ng d ng khác Truy n gói tin, không tin cy Truy n dòng bytes, tin c y 1
- L p trình socket v iTCP Socket: c a giao ti p gi a các ti n trình và giao th c giao v n (UCP ho c TCP) D ch v TCP: truy n các bytes tin c y t m t ti n trình ñ n các ti n trình khác ði u khi n b i Ti n trình ði u khi n b i Ti n trình L p trình viên L p trình viên socket socket TCP v i TCP v i ði u khi n b i ði u khi n b i B ñ m, B ñ m, H ñi u hành internet H ñi u hành Các bi n Các bi n Máy tr m, Máy tr m, máy ch máy ch 2
- L p trình socket v i TCP Client ph i g i yêu c u t i server Ì khi ñư c client liên l c, server TCP t o socket m i ñ ti n Ì Ti n trình máy ch ph i ñang trình máy ch giao ti p v i ñư c th c hi n client Ì máy ch ph i m socket cho phép nói chuy n v i (c ng) ñ nh n yêu c u t nhi u clients client phân bi t client b ng s Client yêu c u server b ng cách: hi u c ng (chương 3…) Ì T o m t socket TCP trên máy Ì Ch rõ IP address & port number c a ti n trình máy ch ð i v i ng d ng Ì Khi client t o socket: client TCP cung c p d ch v truy n dòng TCP t o liên k t t i server bytes tin c y và có th t TCP gi a client và server 3
- Tương tác gi a client/server qua socket TCP Server Client (máy hostid) t o socket, port=x, cho yêu c u t i: welcomeSocket = ServerSocket() T o liên k t t o socket, TCP ch yêu c u t i k t n i t i hostid, port=x clientSocket = connectionSocket = Socket() welcomeSocket.accept() g i yêu c u t nh n yêu c u t clientSocket connectionSocket tr l i t i connectionSocket ñ c tr l i t i clientSocket ñóng socket ñóng connectionSocket clientSocket 4
- Stream keyboard monitor Ì stream m t chu i ký t vào/ra m t ti n trình. inFromUser input Ì input stream ñư c g n v i stream m t ngu n vào, e.g. bàn Client Process phím, socket process Ì output stream ñư c g n v i m t ngu n ra, e.g., màn hình socket. inFromServer outToServer output input stream stream client TCP clientSocket socket TCP socket to network from network 5
- L p trình socket v i TCP Ví d v ng d ng client-server: 1) client ñ c các dòng văn b n do ngư i dùng gõ t bàn phím (inFromUser stream) , g i t i server qua socket (outToServer stream) 2) server ñ c các dòng g i t socket 3) server chuy n sang ch hoa và g i tr l i cho client 4) client ñ c và in l i dòng văn b n nh n ñư c t socket (inFromServer stream) 6
- Ví d : Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; To BufferedReader inFromUser = input stream new BufferedReader(new InputStreamReader(System.in)); To client socket, Socket clientSocket = new Socket("hostname", 6789); n i t i server DataOutputStream outToServer = To new DataOutputStream(clientSocket.getOutputStream()); output stream n i t i socket 7
- Ví d : Java client (TCP), cont. to BufferedReader inFromServer = input stream new BufferedReader(new n i t i socket InputStreamReader(clientSocket.getInputStream())); sentence = inFromUser.readLine(); G it i outToServer.writeBytes(sentence + '\n'); server modifiedSentence = inFromServer.readLine(); ñ c tin t server System.out.println("FROM SERVER: " + modifiedSentence); clientSocket.close(); } } 8
- Ví d : Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; T o socket ch t i port 6789 ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { ch yêu c u t client Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new t o input stream, InputStreamReader(connectionSocket.getInputStream())); n i t i socket 9
- Ví d : Java server (TCP), cont t o output stream DataOutputStream outToClient = n i t i socket new DataOutputStream(connectionSocket.getOutputStream()); ñ c thông tin clientSentence = inFromClient.readLine(); t socket capitalizedSentence = clientSentence.toUpperCase() + '\n'; ghi ra socket outToClient.writeBytes(capitalizedSentence); } } } k t thúc while loop và ch yêu c u t client khác 10
- Chương 2: T ng ng d ng Ì 2.6. L p trình socket v i Ì 2.1 Nguyên lý c a các TCP ng d ng m ng Ì 2.7. L p trình socket v i Ì 2.2 Web và HTTP UDP Ì 2.3 FTP – File Transfer Protocol Ì 2.4 Electronic Mail SMTP, POP3, IMAP Ì 2.5 DNS 11
- L p trình socket v i UDP UDP: không có liên k t gi a client và Ì không có giai ño n b t tay ð i v i ng d ng Ì bên g i ch rõ IP address và port number c a phía nh n UDP cung c p d ch v truy n d trên m i gói tin li u không tin c y gi a Ì server s tìm ñ a ch IP và s client và server hi u c ng tương ng bên trong gói tin UDP: các gói tin có th b m t ho c ñ n không theo th t 12
- Tương tác client/server qua UDP socket Server (máy hostid) Client t o socket, t o socket, clientSocket = port=x, cho các y/c ñ n: DatagramSocket() serverSocket = DatagramSocket() t o gói tin, ñ/c (hostid, port=x, g i gói tin t clientSocket ñ c y/c t serverSocket ghi tr l i lên serverSocket ñ c tr l i t i ch rõ ñ/c, c ng clientSocket c a client ñóng clientSocket 13
- Ví d : Java client (UDP) keyboard monitor inFromUser input stream Client Process Input: ñ c gói tin process (nh c l i: TCP g i “byte stream”) Output: g i gói tin (nh c l i: TCP g i receivePacket sendPacket “byte stream”) UDP UDP packet packet client UDP clientSocket socket UDP socket to network from network 14
- Ví d : Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { To input stream BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); To client socket DatagramSocket clientSocket = new DatagramSocket(); chuy n ñ i InetAddress IPAddress = InetAddress.getByName("hostname"); hostname ->IP s d ng DNS byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); 15
- Ví d : Java client (UDP), cont. T o datagram v i data-to-send, DatagramPacket sendPacket = length, IP addr, port new DatagramPacket(sendData, sendData.length, IPAddress, 9876); G i datagram clientSocket.send(sendPacket); t i server DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); ñ c datagram clientSocket.receive(receivePacket); t server String modifiedSentence = new String(receivePacket.getData()); System.out.println("FROM SERVER:" + modifiedSentence); clientSocket.close(); } } 16
- Ví d : Java server (UDP) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { To datagram socket DatagramSocket serverSocket = new DatagramSocket(9876); t i c ng 9876 byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { T o vùng ñ m DatagramPacket receivePacket = nh n datagram new DatagramPacket(receiveData, receiveData.length); Nh n serverSocket.receive(receivePacket); datagram 17
- Ví d : Java server (UDP), cont String sentence = new String(receivePacket.getData()); L y IP addr InetAddress IPAddress = receivePacket.getAddress(); port # c a ngư i gi int port = receivePacket.getPort(); String capitalizedSentence = sentence.toUpperCase(); sendData = capitalizedSentence.getBytes(); T o datagram DatagramPacket sendPacket = ñ g i t i client new DatagramPacket(sendData, sendData.length, IPAddress, port); Ghi datagram serverSocket.send(sendPacket); ra socket } } } K t thúc vòng while, ch datagram khác 18
CÓ THỂ BẠN MUỐN DOWNLOAD
-
Kiến thức nâng cấp CPU
6 p | 233 | 100
-
Hướng dẫn viết một chương trình Sniffer
7 p | 292 | 94
-
Chương: Lập trình Socket
62 p | 167 | 52
-
Hướng dẫn thực hành: hệ điều hành nâng cao
11 p | 135 | 19
-
Bài giảng Lập trình mạng: Chương 5 - ThS. Trần Bá Nhiệm
66 p | 70 | 8
-
Xây dựng một hệ thống PC cho nhiếp ảnh gia
4 p | 70 | 5
Chịu trách nhiệm nội dung:
Nguyễn Công Hà - Giám đốc Công ty TNHH TÀI LIỆU TRỰC TUYẾN VI NA
LIÊN HỆ
Địa chỉ: P402, 54A Nơ Trang Long, Phường 14, Q.Bình Thạnh, TP.HCM
Hotline: 093 303 0098
Email: support@tailieu.vn