


Processus d'implémentation de la programmation socket en Java (exemple de code)
Le contenu de cet article concerne le processus de mise en œuvre de la programmation socket. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
1.Construction du serveur socket
Instancier le serveur socket et obtenir les requêtes en boucle
package com.orange.util; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; import java.util.Timer; import java.util.TimerTask; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; /** * socket服务器 * * @author Chengjq * */ public class SocketServer { public static int count = 0; public static void main(String[] args) { // TODO 自动生成的方法存根 int port = 4404; // 首先直接创建serversocket ServerSocket serverSocket = null; Socket socket = null; try { serverSocket = new ServerSocket(port); System.out.println("启动socketServer成功,等待客户端的连接"); while (true) { socket = serverSocket.accept(); System.out.println("有新的客户端请求连接"); SocketThread st = new SocketThread(socket); st.start(); ChatManager.getChatManager().add(st); //启动定时任务,如果10s内没有进程 /*Runnable runnable = new Runnable() { int clientNum = 0; public void run() { // task to run goes here clientNum = ChatManager.getChatManager().vector.size(); System.out.println("剩余客户端数量:"+clientNum); if(clientNum ==0 ){ System.out.println("连接超时,或者无客户端连接,关闭serverSocket"); //关闭socket //..... } } }; ScheduledExecutorService service = Executors .newSingleThreadScheduledExecutor(); // 第二个参数为首次执行的延时时间,第三个参数为定时执行的间隔时间 service.scheduleAtFixedRate(runnable, 2, 10, TimeUnit.SECONDS); */ } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { System.out.println("serverSocket已超时"); try { socket.close(); serverSocket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
La classe SocketThread implémente la communication multithread
package com.orange.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; /** * SocketThread实现多线程通信 * * @author Administrator * */ public class SocketThread extends Thread { ServerSocket serverSocket = null; Socket socket = null; public SocketThread(ServerSocket serverSocket,Socket socket) { super(); this.serverSocket = serverSocket; this.socket = socket; } public SocketThread(Socket socket) { super(); this.socket = socket; } public void out(String out) { try { socket.getOutputStream().write(out.getBytes("utf-8")); } catch (IOException e) { e.printStackTrace(); } } public void publish(String out){ ChatManager.getChatManager().publish(this, out); } @Override public void run() { // TODO Auto-generated method stub BufferedReader socketIn = null; PrintWriter socketOut = null; String inMess = null; try { socketIn = new BufferedReader(new InputStreamReader(socket.getInputStream())); socketOut = new PrintWriter(socket.getOutputStream()); while (true) { inMess = socketIn.readLine(); publish(inMess); if("bye".equals(inMess)){ ChatManager.getChatManager().remove(this); } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { try { System.out.println("已结束当前会话"); socketOut.close(); socketIn.close(); socket.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
Prenez Chatmanage comme exemple, gérez et contrôlez tous les threads clients
package com.orange.util; import java.util.Vector; public class ChatManager { // 实现单例化 private ChatManager() { }; private static final ChatManager cm = new ChatManager(); public static ChatManager getChatManager() {// 返回值为ChatManager return cm; } // 单例化完成 Vector<SocketThread> vector = new Vector<SocketThread>(); public void add(SocketThread st) {// 为当前集合添加SocketThread对象 vector.add(st); } public void remove(SocketThread st) {// 当前客户端关闭连接 vector.remove(st); } public void removeall() {// 关闭所有连接 for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程 SocketThread csChatSocket = vector.get(i); if(csChatSocket!=null){ vector.remove(csChatSocket); } } } // 某一个线程向其他的客户端发送信息 public void publish(SocketThread st, String out) { for (int i = 0; i < vector.size(); i++) {// 遍历所有的线程 SocketThread csChatSocket = vector.get(i); if (csChatSocket != st)// 判断不是当前线程就发送此消息 csChatSocket.out(out + "\n"); } } // 向当前线程发信息 public void publish_present(SocketThread st, String out) { st.out(out + "\n"); } }
À ce stade, le serveur est configuré
Client (créez deux clients)<🎜. >
Client 1 (Écoutez le serveur spécifié et saisissez des messages via la console pour communiquer entre le serveur et le client et entre les clients,)package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; /** * 客户端1 * @author Chengjq * */ public class SocketClient1 { @SuppressWarnings("static-access") public static void main(String[] args) { try { //初始化客户端 Socket socket = new Socket("127.0.0.1", 4404); BufferedReader readline = new BufferedReader(new InputStreamReader(System.in)); //获取输出打印流 PrintWriter socketOut = new PrintWriter(socket.getOutputStream()); String outTemp = null; System.out.println("开始准备向服务器端发起请求---\n自己:"); // 已启动连接socket服务器,准备实时接收来自其他客户端的消息 GetMess getMess = new GetMess(socket); getMess.start(); // 通过控制台发送消息给其他客户端,以“bye”为结束语 while ((outTemp = readline.readLine()) != null) { //发送信息 socketOut.println(outTemp); socketOut.flush(); if("bye".equals(outTemp)){ break; } } getMess.currentThread().interrupt(); //依次关闭各种流 readline.close(); socketOut.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; import java.net.UnknownHostException; public class SocketClient2 { @SuppressWarnings("static-access") public static void main(String[] args) { try { //初始化客户端 Socket socket = new Socket("127.0.0.1", 4404); BufferedReader readline = new BufferedReader(new InputStreamReader(System.in)); //获取输出打印流 PrintWriter socketOut = new PrintWriter(socket.getOutputStream()); String outTemp = null; System.out.println("开始准备向服务器端发起请求---\n自己:"); // 已启动连接socket服务器,准备实时接收来自其他客户端的消息 GetMess getMess = new GetMess(socket); getMess.start(); // 通过控制台发送消息给其他客户端,以“bye”为结束语 while ((outTemp = readline.readLine()) != null) { //发送信息 socketOut.println(outTemp); socketOut.flush(); if("bye".equals(outTemp)){ break; } } getMess.currentThread().interrupt(); //依次关闭各种流 readline.close(); socketOut.close(); socket.close(); } catch (UnknownHostException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }
package com.orange; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.Socket; public class GetMess extends Thread { Socket socket = null; public GetMess(Socket socket) { super(); this.socket = socket; } @Override public void run() { // TODO Auto-generated method stub BufferedReader socketIn = null; try { InputStream is = socket.getInputStream(); InputStreamReader isr = new InputStreamReader(is); socketIn = new BufferedReader(isr); String inTemp = null; while(true){ inTemp = socketIn.readLine(); if(inTemp != null && !"bye".equals(inTemp) ){ System.out.println("好友:\n"+inTemp); }else{ System.out.println("好友:\n已下线,关闭当前回话"); break; } } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }finally { try { Thread.currentThread().interrupt(); socketIn.close(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds

Titre : Programmation de sockets et exemples de code en Python Introduction : À l'ère d'Internet moderne, la communication de données est partout. La programmation socket en Python offre un moyen simple et efficace de réaliser la transmission de données sur le réseau. Cet article explique comment utiliser le module socket de Python pour la communication de données et fournit des exemples de code spécifiques pour aider les lecteurs à mieux comprendre et appliquer la programmation socket. 1. Qu'est-ce que la programmation de sockets ? Socket, c'est-à-dire socket, est l'implémentation de

PHP est un langage de programmation largement utilisé dans le développement Web et prend en charge de nombreuses applications de programmation réseau. Parmi eux, la programmation Socket est un moyen couramment utilisé pour mettre en œuvre la communication réseau. Elle permet aux programmes de mettre en œuvre une communication inter-processus et de transmettre des données via le réseau. Cet article explique comment utiliser les fonctions de programmation Socket en PHP. 1. Introduction à la programmation Socket Socket (socket) est un concept abstrait qui représente un port ouvert dans la communication réseau. Un processus doit se connecter à ce port afin de communiquer avec d'autres processus.

Avec le développement d’Internet, la programmation réseau est devenue une partie importante de l’informatique. En tant que langage de programmation puissant, C++ offre également une grande prise en charge de la programmation réseau. Cet article explique comment utiliser le C++ pour la programmation réseau. Présentation de la programmation réseau La programmation réseau est le processus d'écriture de programmes de communication utilisant des réseaux informatiques. La programmation réseau nécessite l'utilisation de protocoles réseau (tels que TCP/IP) pour la transmission des données. En programmation réseau, il existe deux rôles principaux : client et serveur. Le client fait référence au programme qui initie la demande, et

Avec le développement rapide d'Internet, de plus en plus d'applications nécessitent une communication réseau et la programmation par socket est devenue une méthode de programmation importante. Le langage Go est un langage de programmation qui a beaucoup attiré l'attention ces dernières années et qui présente également des avantages uniques dans le domaine de la programmation réseau. Cet article présentera la programmation socket en langage Go et comment écrire un programme serveur simple. 1. Présentation de la programmation socket Socket est une couche d'abstraction située entre la couche application et la couche transport, qui permet aux applications de communiquer sur le réseau.

Guide de démarrage PHP : programmation Socket La programmation Socket fait référence à un moyen de communiquer sur un réseau informatique. Grâce à la programmation Socket, nous pouvons implémenter de nombreux types d'applications réseau, telles que des salons de discussion, des jeux en ligne, des appels Internet, etc. Dans le domaine du développement Web, la programmation Socket joue également un rôle très important, comme la réalisation de communications en temps réel, de messages push et d'autres fonctions, de cette manière, nous pouvons rendre les applications Web plus colorées et interactives. PHP est un très

Avec le développement des logiciels et la popularité d'Internet, la programmation réseau devient de plus en plus importante, et la programmation Socket est l'une des fonctions les plus basiques et de bas niveau pour réaliser la programmation réseau. Avec la sortie de PHP8.0, nous pouvons constater que PHP a introduit de nouvelles fonctionnalités et optimisations. Dans cet article, nous explorerons comment implémenter la programmation Socket dans PHP8.0. Qu’est-ce que la programmation Socket ? Socket est une méthode de programmation pour la communication réseau qui peut établir une connexion entre un client et un serveur. Le plus courant dans le développement Web

Ces dernières années, le langage Go (également connu sous le nom de Golang) est devenu de plus en plus populaire parmi la communauté des programmeurs. Le langage Go est facile à apprendre, efficace, puissant, sûr et stable, il est donc profondément apprécié des développeurs. Parmi eux, la prise en charge du langage Go pour la programmation Socket a reçu une large attention et des éloges. Cet article présentera en détail la programmation Socket en langage Go, couvrant les principes de base, l'utilisation, l'implémentation du code et d'autres contenus connexes. 1. Principes de base de la programmation Socket La programmation Socket fait référence à l'utilisation de Socket dans la programmation réseau.

Comment résoudre les problèmes de programmation réseau de code rencontrés en Java Introduction : Avec le développement rapide d'Internet, la programmation réseau est devenue l'une des compétences indispensables aux développeurs. En tant que langage de programmation largement utilisé, Java présente également des avantages et des défis uniques en matière de programmation réseau. Cet article explorera les problèmes courants de programmation réseau en Java et proposera des solutions. 1. Problèmes de connexion Socket Socket est l'un des composants de base de la communication réseau, mais lorsque vous utilisez Socket pour vous connecter, vous pouvez rencontrer les problèmes suivants :
