Cet article présente principalement une compréhension approfondie de Java Socket. La communication réseau en Java est implémentée via Socket. Socket est divisé en deux catégories : ServerSocket et Socket. Ceux qui sont intéressés peuvent en savoir plus
<.> Brève description
Socket en Java est divisé en deux types : Socket ordinaire et NioSocket Voici une introduction à Socket. Nous pouvons comparer Socket à un moyen de transport entre deux villes. Avec lui, vous pouvez faire la navette entre les deux villes. Il existe de nombreux types de moyens de transport, et chaque moyen de transport a également une correspondance. règles de circulation. Il en va de même pour les Sockets, il en existe de nombreux types. Dans la plupart des cas, des sockets de flux TCP/IP sont utilisés, ce qui constitue un protocole de communication stable. (Comparaison de TCP/IP et UDP) La communication réseau en Java est implémentée via Socket. Socket est divisé en deux catégories : ServerSocket et Socket est utilisé côté serveur pour écouter les requêtes via la méthode d'acceptation. . Le Socket est renvoyé après la requête. Le Socket est utilisé pour terminer spécifiquement la transmission de données. Le client utilise directement le Socket pour lancer une requête et transmettre des données.L'utilisation de ServerSocket peut être divisée en trois étapes :
Châtaigne
Client :package IO; import java.io.*; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Client { public static void main(String[] args) { String msg = "Client Data"; try { Socket socket = new Socket("127.0.0.1", 9090); // 先写、再读 PrintWriter printWriter = new PrintWriter(socket.getOutputStream()); // 发送数据 printWriter.println(msg); printWriter.flush(); // 获得服务端返回的数据 BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from server: " + line + "\ttime=" + new Date().getTime()); // 关闭资源 printWriter.close(); bufferedReader.close(); socket.close(); } catch (IOException e) { e.printStackTrace(); } } }
package IO; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Date; /** * Created by zhengbin06 on 2017/2/2. */ public class Server { private static Socket socket = null; private static ServerSocket serverSocket = null; public static void main(String[] args) throws IOException { BufferedReader bufferedReader = null; PrintWriter printWriter = null; try { // 创建一个ServerSocket监听9090端口 serverSocket = new ServerSocket(9090); while (true) { System.out.println("开始等待请求。。。。"); // 等待请求 // 监听并接受到此套接字的连接。此方法在连接传入之前一直阻塞。 socket = serverSocket.accept(); System.out.println("接收到请求:" + socket.toString() + "\ttime=" + new Date().getTime()); // 接收到请求后使用socket进行通信, 创建BufferedReader用于读取数据 bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream())); String line = bufferedReader.readLine(); System.out.println("received from client: " + line + "\ttime=" + new Date().getTime()); // 创建PrintWriter, 用于发送数据 printWriter = new PrintWriter(socket.getOutputStream()); printWriter.println("received data: " + line + "\ttime=" + new Date().getTime()); printWriter.flush(); } } finally { // 关闭所有资源 bufferedReader.close(); printWriter.close(); socket.close(); serverSocket.close(); } } }
Détails
Demande d'écoute :
Quand Lorsqu'une nouvelle demande Socket arrive, une nouvelle structure de données socket sera créée pour cette connexion. Les informations sur les données socket contiennent l'adresse et le port de l'adresse et du port source de la demande formelle. Cette structure de données nouvellement créée sera associée à une liste de structures de données de connexion en suspens dans l'instance ServerSocket. Notez que l'instance Socket correspondante du serveur n'a pas été créée pour le moment. L'instance Socket du serveur ne reviendra pas tant que la négociation à trois avec le client n'est pas terminée, et la structure de données correspondant à l'instance Socket ne sera pas Les déplacements dans la liste sont effectués dans la liste.Transmission de données :
Lorsque la connexion a été établie avec succès, le serveur et le client auront une instance Socket, et chaque instance Socket aura un InputStream et un OutputStream . Et échangez des données via ces deux objets.