Maison >Java >javaDidacticiel >Explication détaillée d'un exemple de code pour une communication unidirectionnelle en Java

Explication détaillée d'un exemple de code pour une communication unidirectionnelle en Java

黄舟
黄舟original
2017-09-07 10:34:302019parcourir

Cet article présente principalement la méthode et les exemples associés de communication unidirectionnelle via des sockets dans la programmation réseau Java. Il s'agit d'un programme d'introduction à la programmation réseau, bien qu'il soit simple, mais il a une certaine valeur de référence. il.

En programmation réseau, si le client doit uniquement envoyer des messages au serveur et que le serveur n'est pas obligé d'envoyer des messages au client, on parle de communication sur une seule ligne. Une fois que le socket client et le socket serveur sont connectés avec succès, on peut estimer que les données sont envoyées via le flux de sortie et que le serveur reçoit les données via le flux d'entrée. Voici un exemple de communication unidirectionnelle simple.

Exemple 1 : Cet exemple est un programme serveur TCP, qui établit un socket serveur dans la méthode getserver() et appelle la méthode getClienMessage() pour obtenir des informations sur le client. Le code est le suivant :


import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;

public class MyTcp {
	private BufferedReader reader;
	private ServerSocket server;
	private Socket socket;
	void getserver() {
		try {
			server = new ServerSocket(8998);
			System.out.println("服务器套接字已经创建成功");
			while(true) {
				System.out.println("等待客户机的连接");
				socket = server.accept();
				reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
				getClienMessage();
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		
	}
	private void getClienMessage() {
		try {
			while (true) {
				System.out.println("客户机:"+ reader.readLine());
			}
		}catch(Exception e) {
			e.printStackTrace();
		}
		try {
			if(reader !=null) {
				reader.close();
			}
			if(socket !=null) {
				socket.close();
			}
		}catch(IOException e) {
			e.printStackTrace();
		}
	}
	public static void main(String[] args) {
		MyTcp tcp = new MyTcp();
		tcp.getserver();
	}
}

Résultat d'exécution :

Le socket serveur a été créé avec succès
En attente pour la connexion client

Jetons maintenant un coup d'œil au programme client.

Exemple 2 : Programme client pour envoyer les informations saisies par l'utilisateur dans la zone de texte au serveur, et afficher les informations saisies dans la zone de texte dans le champ de texte du client. Le code est le suivant :


import java.awt.BorderLayout;
import java.awt.Container;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.PrintWriter;
import java.net.Socket;

import javax.swing.JFrame;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
import javax.swing.border.BevelBorder;

public class MyClien extends JFrame{
	private PrintWriter writer;
	Socket socket;
	private JTextArea ta = new JTextArea();
	private JTextField tf = new JTextField();
	Container cc;
	public MyClien(String title) {
		super(title);
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		cc = this.getContentPane();
		final JScrollPane scrollPane = new JScrollPane();
		scrollPane.setBorder(new BevelBorder(BevelBorder.RAISED));
		getContentPane().add(scrollPane, BorderLayout.CENTER);
		scrollPane.setViewportView(ta);
		cc.add(tf,"South");
		tf.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				writer.println(tf.getText());
				ta.append(tf.getText()+ '\n');
				ta.setSelectionEnd(ta.getText().length());
				tf.setText("");
			}
		});
	}
		private void connect() {
			ta.append("尝试连接\n");
			try {
				socket = new Socket("127.0.0.1",8998);
				writer = new PrintWriter(socket.getOutputStream(),true);
				ta.append("完成连接\n");
			}catch(Exception e) {
				e.printStackTrace();
			}
		}
		public static void main(String[] args) {
			MyClien clien = new MyClien("向服务器传送数据");
			clien.setSize(200,200);
			clien.setVisible(true);
			clien.connect();
		}
	}

Résultats d'exécution côté serveur :

Le socket serveur a été créé avec succès
En attente du client Connexion à la machine
Client : La révolution n'a pas encore réussi, les camarades doivent encore travailler dur !

Résultats en cours d'exécution du client :

Essayez de vous connecter
Connexion complète
La révolution n'a pas encore réussi, les camarades doivent encore travailler dur !

Remarque :

Lorsque plusieurs applications réseau sont installées sur une machine, il est possible que le numéro de port spécifié ait été occupé . Vous pouvez également rencontrer une situation dans laquelle un programme réseau qui fonctionnait auparavant correctement ne parvient soudainement pas à s'exécuter. Cette situation peut également être due au fait que le port est occupé par un autre programme. À ce stade, utilisez la commande netstat -an pour afficher les ports utilisés par le programme.

Il y a un autre point très important ici. Il y a deux codes sources mentionnés dans cet article, l'un est le programme côté serveur et l'autre est le programme côté client. Lors de l'exécution, le programme serveur doit être exécuté en premier, puis le programme client, et les numéros de port des deux morceaux de code doivent être les mêmes.

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn