Heim  >  Artikel  >  Java  >  Detaillierte Erläuterung des Beispielcodes für unidirektionale Kommunikation in Java

Detaillierte Erläuterung des Beispielcodes für unidirektionale Kommunikation in Java

黄舟
黄舟Original
2017-09-07 10:34:301997Durchsuche

Dieser Artikel stellt hauptsächlich die Methode und verwandte Beispiele der unidirektionalen Kommunikation über Sockets in der Java-Netzwerkprogrammierung vor. Obwohl es einfach ist, kann es von Freunden verwendet werden, die es benötigen dazu.

Wenn bei der Netzwerkprogrammierung der Client nur Nachrichten an den Server senden muss und der Server keine Nachrichten an den Client senden muss, spricht man von Single-Line-Kommunikation. Nachdem der Client-Socket und der Server-Socket erfolgreich verbunden wurden, kann geschätzt werden, dass Daten über den Ausgabestream gesendet werden und der Server Daten über den Eingabestream empfängt. Das Folgende ist ein Beispiel für eine einfache unidirektionale Kommunikation.

Beispiel 1: Dieses Beispiel ist ein TCP-Serverprogramm, das einen Server-Socket in der Methode getserver() einrichtet und die Methode getClienMessage() aufruft, um Client-Informationen abzurufen. Der Code lautet wie folgt:


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();
	}
}

Laufergebnis:

Der Server-Socket wurde erfolgreich erstellt
Warten für die Client-Verbindung

Werfen wir nun einen Blick auf das Client-Programm.

Beispiel 2: Client-Programm, um die vom Benutzer in das Textfeld eingegebenen Informationen an den Server zu senden und die in das Textfeld eingegebenen Informationen im Textfeld des Clients anzuzeigen. Der Code lautet wie folgt:


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();
		}
	}

Ergebnisse der serverseitigen Ausführung:

Der Server-Socket wurde erfolgreich erstellt
Warten auf die Verbindung des Kunden zur Maschine
Kunde: Die Revolution ist noch nicht gelungen, Genossen müssen noch hart arbeiten!

Kundenlaufergebnisse:

Versuchen Sie, eine Verbindung herzustellen
Vollständige Verbindung
Die Revolution war noch nicht erfolgreich, Kameraden müssen noch hart arbeiten!

Hinweis:

Wenn mehrere Netzwerkanwendungen auf einer Maschine installiert sind, ist es möglich, dass die angegebene Portnummer belegt ist . Es kann auch vorkommen, dass ein Netzwerkprogramm, das zuvor ordnungsgemäß lief, plötzlich nicht mehr ausgeführt werden kann. Dies kann auch daran liegen, dass der Port von einem anderen Programm belegt ist. Verwenden Sie zu diesem Zeitpunkt den Befehl netstat -an, um die vom Programm verwendeten Ports anzuzeigen.

Hier gibt es noch einen weiteren sehr wichtigen Punkt. In diesem Artikel werden zwei Quellcodes erwähnt, einer ist das serverseitige Programm und der andere ist das clientseitige Programm. Beim Ausführen muss zuerst das Serverprogramm und dann das Clientprogramm ausgeführt werden, und die Portnummern der beiden Codeteile müssen gleich sein.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung des Beispielcodes für unidirektionale Kommunikation in Java. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn