290 likes | 312 Views
برنامه نويسي تحت شبكه اينترنت Socket Programming. انواع سوكت و مفاهيم آنها مفهوم سرويسهنده /مشتري توابع مورد استفاده در برنامه سرويسدهنده توابع مورد استفاده در برنامه مشتري معرفي زبان جاوا آشنايي با اپلت. هدفهاي آموزشي :. روال برقراري ارتباط بين دو برنامه از راه دور:.
E N D
برنامهنويسي تحت شبكه اينترنت Socket Programming • انواع سوكت و مفاهيم آنها • مفهوم سرويسهنده /مشتري • توابع مورد استفاده در برنامه سرويسدهنده • توابع مورد استفاده در برنامه مشتري • معرفي زبان جاوا • آشنايي با اپلت هدفهاي آموزشي :
روال برقراري ارتباط بين دو برنامه از راه دور: الف) درخواست برقراري ارتباط با كامپيوتري خاص با IP مشخص و برنامهاي روي آن كامپيوتر با آدرس پورت مشخص = درخواست فراخواني تابع سيستمي socket() ب) مبادله دادهها با توابع send() و recv() در صورت برقراري ارتباط ج) اتمام ارتباط با فراخواني تابع close()
انواع سوكت و مفاهيم آنها • سوكتهاي نوع استريم= سوكتهاي اتصال گراConnection Oriented • سوكتهاي نوع ديتاگرام= سوكتهاي بدون اتصالConnectionless سوكتهاي نوع استريم مبتني بر پروتكل TCP لزوم برقراري يك اتصالقبل از مبادله دادهها به روش دستتكاني سهمرحلهاي سوكتهاي نوع ديتاگرام مبتني بر پروتكل UDP مبادله داده بدون نياز به برقراري هيچ ارتباط و يا اتصالي و عدم تضميني بررسيدن دادهها، صحت دادهها و ترتيب دادهها
سوكتهاي نوع استريم كاربرد: پروتكل انتقال فايلFTP پروتكل انتقال صفحات ابرمتنHTTP پروتكل انتقال نامه هايالكترونيكي SMTP سوكتهاي نوع ديتاگرام كاربرد: انتقال صدا و و تصوير يا سيستم DNS
سوكت يك مفهوم انتزاعي از تعريف ارتباط در سطح برنامهنويسي • اعلام آمادگي جهت مبادله دادهها نوسط برنامهنويس به سيستم عامل بدون درگير شدن با جزئيات پروتكل TCP يا UDPو تقاضاي ايجاد فضا و منابع مورد نياز جهت برقراري يك ارتباط از سيستمعامل سوكتsocket
سرويس دهنده /مشتري تعريف عمومي: ): پروسه ايست نيازمند اطلاعاتclient)مشتري :(serverسرويس دهنده( پروسه اي است براي به اشتراك گذاشتن اطلاعات و تحويل اطلاعات به مشتري
برنامه سمت سرويس دهندهServer Side برنامهاي است كه روي ماشين سرويسدهنده نصب ميشود و منتظر است تا تقاضائي مبني بر برقراري يك ارتباط دريافت كرده و پس از پردازش آن تقاضا ، پاسخ مناسب را ارسال نمايد بنابراين در حالت كلي برنامه سرويس دهنده شروع كننده يك ارتباط نيست.
برنامه هاي سمت مشتريClient Side برنامه هاي سمت مشتريبنابر نياز، اقدام به درخواست اطلاعات مينمايند. تعداد مشتريها روي ماشينهاي متفاوت يا حتي روي يك ماشين ميتواند متعدد باشد و ليكن معمولاً تعداد سرويس دهنده ها يكي است.(مگر در سيستمهاي توزيعشده) Request For Information ارتباط بين سرويس دهنده و مشتري Client Server Returned Information
الگوريتم كار برنامه سمت سرويسدهنده الف) Socket():ااعلام درخواست ارتباط و تعيين نوع آن (TCPيا (UDP از سيستمعامل با اين تابع سيستمي ب) Bind(): نسبت دادن يك آدرس پورت سوكتي كه باز كرده ايم :Listen()ج) اعلام شروع پذيرش تقاضاهاي ارتباط TCP با اين تابع به سيستم عامل و تعين حداكثر تعداد پذيرش ارتباط TCP د):Accept() تقاضاي معرفي يكي از ارتباطات معلقبا استفاده از اين تابع از سيستم عامل ه):Send(),recv()مبادله داده و) :Close() قطع ارتباط دو طرفه ارسال و دريافت ز) :Shutdown()قطع يك طرفه يكي از عمليات ارسال يا دريافت
ايجاد يك سوكت (مشخصه يك ارتباط ) :Socket()الف) تقاضاي برقراري ارتباط با سرويسدهنده:Connect()ب) ارسال و دريافت داده ها:Send(),recv()ج) قطع ارتباط بصورت دو طرفه .:Close()د) :Shutdown()قطع ارتباط بصورت يك طرفه. الگوريتم كار برنامه سمت مشتري
socketتابع () توابع مورد استفاده در برنامه سمت سرويسدهنده (مبتني بر(TCP Bind() تابع Listen() تابع Accept() تابع Send(),recv() توابع Close(),shutdown() توابع
(TCPتوابع مورد استفاده در برنامه مشتري (مبتني بر پروتكل socketتابع () Connect()تابع Send(),recv() توابع Close(),shutdown() توابع
جاوا زباني است شيئگرا، ساده، ايمن، قابل حمل، توانمند در حمايت از برنامههاي چند ريسماني با معماري خنثي • :c,c++تفاوتهاي زبان جاوا با زبانهاي • اشاره گرها • استراكچرها و يونيونها • توابع • وراثت چندگانه • رشتهها • goto • Operator overloading • تبديل خودكار نوع • آرگومانهاي خط فرمان • شيئ گرايي • مفسر زمان اجراي جاوا امكانات زبان جاوا
ريزبرنامه يا برنامة كوچكي است كه درون يك صفحة وب قرار ميگيرد و روي يك سرويسدهندةاينترنت قابل دسترسي بوده و به عنوان بخشي از يك سند وب بر روي ماشين مشتري اجرا ميشود. • برنامة اجرايي است و براي اجرا در محيط مرورگر در نظر گرفته شده تا قابليتهايي كه صفحات وب ندارند از طريق آنها فراهم شود. • اپلتها با برچسب APPLET درون صفحة وب تعريف ميشوند ولي فايلي خارجي به حساب ميآيند Applet اپلت
عدم دسترسي به سيستم فايل جز در موارد محدود • عدم توانايي در فراخواني و اجراي برنامه در ماشين اجراكننده آن • اجرانمودن اپلت داخل يك مرورگر سازگار با جاوا مثل Netscape Navigator • استفاده از Applet Viewer دو راهاجراي يك اپلت محدوديتهاي اپلت
Elements of C-S Computing a client, a server, and network Request Client Server Network Result Client machine Server machine
java.net Used to manage: URL streams Client/server sockets Datagrams
Part III - Networking ServerSocket(1234) Output/write stream Input/read stream Socket(“128.250.25.158”, 1234) Server_name: “manjira.cs.mu.oz.au”
Server side Socket Operations 1. Open Server Socket: ServerSocket server; DataOutputStream os; DataInputStream is; server = new ServerSocket( PORT ); 2. Wait for Client Request: Socket client = server.accept(); 3. Create I/O streams for communicating to clients is = new DataInputStream( client.getInputStream() ); os = new DataOutputStream( client.getOutputStream() ); 4. Perform communication with client Receiive from client: String line = is.readLine(); Send to client: os.writeBytes("Hello\n"); 5. Close sockets: client.close(); For multithreade server: while(true) { i. wait for client requests (step 2 above) ii. create a thread with “client” socket as parameter (the thread creates streams (as in step (3) and does communication as stated in (4). Remove thread once service is provided. }
Client side Socket Operations 1. Get connection to server: client = new Socket( server, port_id ); 2. Create I/O streams for communicating to clients is = new DataInputStream( client.getInputStream() ); os = new DataOutputStream( client.getOutputStream() ); 3. Perform communication with client Receiive from client: String line = is.readLine(); Send to client: os.writeBytes("Hello\n"); 4. Close sockets: client.close();
A simple server (simplified code) import java.net.*; import java.io.*; public class ASimpleServer { public static void main(String args[]) { // Register service on port 1234 ServerSocket s = new ServerSocket(1234); Socket s1=s.accept(); // Wait and accept a connection // Get a communication stream associated with the socket OutputStream s1out = s1.getOutputStream(); DataOutputStream dos = new DataOutputStream (s1out); // Send a string! dos.writeUTF(“Hi there”); // Close the connection, but not the server socket dos.close(); s1out.close(); s1.close(); } }
A simple client (simplified code) import java.net.*; import java.io.*; public class SimpleClient { public static void main(String args[]) throws IOException { // Open your connection to a server, at port 1234 Socket s1 = new Socket("130.63.122.1",1234); // Get an input file handle from the socket and read the input InputStream s1In = s1.getInputStream(); DataInputStream dis = new DataInputStream(s1In); String st = new String (dis.readUTF()); System.out.println(st); // When done, just close the connection and exit dis.close(); s1In.close(); s1.close(); } }
مثالهای بررسی شده در کلاس به کمک Thread
Socket-programming Socket: a door between application process and end-end-transport protocol (UDP or TCP) TCP service: reliable transfer of bytes from one process to another process process TCP with buffers, variables TCP with buffers, variables socket socket controlled by application developer controlled by application developer controlled by operating system controlled by operating system internet host or server host or server
Example: Java client (TCP) import java.io.*; import java.net.*; class TCPClient { public static void main(String argv[]) throws Exception { String sentence; String modifiedSentence; BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); Socket clientSocket = new Socket("hostname", 6789); DataOutputStream outToServer = new DataOutputStream(clientSocket.getOutputStream()); Create input stream Create client socket, connect to server Create output stream attached to socket Study guide: be able to write a simple Client-server program in Java.
Example: Java server (TCP) import java.io.*; import java.net.*; class TCPServer { public static void main(String argv[]) throws Exception { String clientSentence; String capitalizedSentence; ServerSocket welcomeSocket = new ServerSocket(6789); while(true) { Socket connectionSocket = welcomeSocket.accept(); BufferedReader inFromClient = new BufferedReader(new InputStreamReader(connectionSocket.getInputStream())); Create welcoming socket at port 6789 Wait, on welcoming socket for contact by client Create input stream, attached to socket
Example: Java client (UDP) import java.io.*; import java.net.*; class UDPClient { public static void main(String args[]) throws Exception { BufferedReader inFromUser = new BufferedReader(new InputStreamReader(System.in)); DatagramSocket clientSocket = new DatagramSocket(); InetAddress IPAddress = InetAddress.getByName("hostname"); byte[] sendData = new byte[1024]; byte[] receiveData = new byte[1024]; String sentence = inFromUser.readLine(); sendData = sentence.getBytes(); Create input stream Create client socket Translate hostname to IP address using DNS
Example: Java server (UDP) import java.io.*; import java.net.*; class UDPServer { public static void main(String args[]) throws Exception { DatagramSocket serverSocket = new DatagramSocket(9876); byte[] receiveData = new byte[1024]; byte[] sendData = new byte[1024]; while(true) { DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); serverSocket.receive(receivePacket); Create datagram socket at port 9876 Create space for received datagram Receive datagram