A kiválasztott változat és az aktuális verzió közötti különbségek a következők.
| Következő változat | Előző változat | ||
|
tanszek:oktatas:java_example_for_blocking_and_non-blocking_socket [2023/03/05 16:13] knehez létrehozva |
tanszek:oktatas:java_example_for_blocking_and_non-blocking_socket [2023/03/05 16:18] (aktuális) knehez |
||
|---|---|---|---|
| Sor 1: | Sor 1: | ||
| - | ==== Traditional blocked TCP based sockets in Java ==== | + | ==== Blocking TCP based sockets in Java ==== |
| === Socket server source code === | === Socket server source code === | ||
| Sor 138: | Sor 138: | ||
| } | } | ||
| </code> | </code> | ||
| + | |||
| + | ==== Non-blocking TCP based sockets in Java ==== | ||
| + | |||
| + | The following Agent sends a message and waits for a response on port 8080, also with UDP. Older versions of the Eclipse IDE, the text you type on the console can be sent by pressing ctrl+z | ||
| + | |||
| + | <code java> | ||
| + | package org.ait; | ||
| + | | ||
| + | import java.io.BufferedReader; | ||
| + | import java.io.InputStreamReader; | ||
| + | import java.net.DatagramPacket; | ||
| + | import java.net.DatagramSocket; | ||
| + | import java.net.InetAddress; | ||
| + | | ||
| + | public 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("localhost"); | ||
| + | |||
| + | byte[] sendData = new byte[1024]; | ||
| + | byte[] receiveData = new byte[1024]; | ||
| + | |||
| + | String sentence = inFromUser.readLine(); | ||
| + | sendData = sentence.getBytes(); | ||
| + | |||
| + | DatagramPacket sendPacket = new DatagramPacket(sendData, sendData.length, IPAddress, 8080); | ||
| + | clientSocket.send(sendPacket); | ||
| + | |||
| + | DatagramPacket receivePacket = new DatagramPacket(receiveData, receiveData.length); | ||
| + | clientSocket.receive(receivePacket); | ||
| + | String modifiedSentence = new String(receivePacket.getData()); | ||
| + | |||
| + | System.out.println("converted:" + modifiedSentence); | ||
| + | clientSocket.close(); | ||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||
| + | The UDP server waits for the agents messages on port 8080 and converts them to uppercase letters and sends them back to the client UDP socket. | ||
| + | |||
| + | <code java> | ||
| + | package org.ait; | ||
| + | | ||
| + | import java.net.DatagramPacket; | ||
| + | import java.net.DatagramSocket; | ||
| + | import java.net.InetAddress; | ||
| + | | ||
| + | public class UDPServer { | ||
| + | public static void main(String args[]) throws Exception { | ||
| + | |||
| + | DatagramSocket serverSocket = new DatagramSocket(8080); | ||
| + | |||
| + | byte[] bytesReceived = new byte[1024]; | ||
| + | byte[] bytesSent = new byte[1024]; | ||
| + | |||
| + | |||
| + | DatagramPacket receivePacket = new DatagramPacket(bytesReceived, bytesReceived.length); | ||
| + | // here we are waiting for the packets | ||
| + | serverSocket.receive(receivePacket); | ||
| + | |||
| + | String textMessage = new String(receivePacket.getData()); | ||
| + | |||
| + | System.out.println("I got: " + textMessage); | ||
| + | |||
| + | InetAddress IPAddress = receivePacket.getAddress(); | ||
| + | int port = receivePacket.getPort(); | ||
| + | |||
| + | String upperCaseText = textMessage.toUpperCase(); | ||
| + | bytesSent = upperCaseText.getBytes(); | ||
| + | |||
| + | // send back | ||
| + | DatagramPacket sendPacket = new DatagramPacket(bytesSent, bytesSent.length, IPAddress, port); | ||
| + | serverSocket.send(sendPacket); | ||
| + | serverSocket.close(); | ||
| + | |||
| + | } | ||
| + | } | ||
| + | </code> | ||
| + | |||