Hướng dẫn Lập trình socket
lượt xem 67
download
Download
Vui lòng tải xuống để xem tài liệu đầy đủ
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 |
235
|
100
-
Hướng dẫn viết một chương trình Sniffer
7 p |
301
|
94
-
Chương: Lập trình Socket
62 p |
175
|
54
-
Hướng dẫn thực hành: hệ điều hành nâng cao
11 p |
141
|
19
-
Bài giảng Lập trình mạng: Chương 5 - ThS. Trần Bá Nhiệm
66 p |
77
|
8
-
Xây dựng một hệ thống PC cho nhiếp ảnh gia
4 p |
73
|
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