ホームページ  >  記事  >  Java  >  Javaでの片方向通信のサンプルコードを詳しく解説

Javaでの片方向通信のサンプルコードを詳しく解説

黄舟
黄舟オリジナル
2017-09-07 10:34:301998ブラウズ

この記事は、Java ネットワークプログラミングにおけるソケットを介した一方向通信の方法と関連する例を主に紹介します。簡単ではありますが、必要な友人には参考になります。

ネットワークプログラミングでは、クライアントがサーバーにメッセージを送信するだけでよく、サーバーがクライアントにメッセージを送信する必要がない場合、それは単線通信と呼ばれます。クライアント ソケットとサーバー ソケットが正常に接続された後、データは出力ストリームを通じて送信され、サーバーは入力ストリームを通じてデータを受信すると推定できます。以下は単純な一方向通信の例です。

: 例 1: 实 このインスタンスは、getServer()メソッドでサーバーソケットを設定し、getClienMessage()メソッドを呼び出してクライアント情報を取得するTCPサーバープログラムです。コードは次のとおりです:

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


実行結果:

サーバーソケットが正常に作成されましたクライアント接続を待機しています


次に、クライアントプログラムを見てみましょう。

例 2:

ユーザーがテキスト ボックスに入力した情報をサーバーに送信し、テキスト ボックスに入力された情報をクライアントのテキスト フィールドに表示するクライアント プログラム。コードは次のとおりです:

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


サーバー側の操作結果:

サーバーソケットが正常に作成されましたクライアント接続を待機しています

クライアント: 革命はまだ成功していません、同志たちはまだ努力する必要があります!




クライアントの実行結果:

接続を試みる接続を完了する

革命はまだ成功していません、同志はまだ努力する必要があります!




注:

1 台のマシンに複数のネットワーク アプリケーションがインストールされている場合、指定されたポート番号が占有されている可能性があります。また、以前は正常に動作していたネットワーク プログラムが突然動作しなくなる場合があります。この状況は、ポートが別のプログラムによって占有されていることが原因である可能性もあります。この時点で、コマンド netstat -an を使用して、プログラムが使用するポートを表示します。

ここでもう 1 つ非常に重要な点があります。この記事では 2 つのソース コードが説明されています。1 つはサーバー側プログラム、もう 1 つはクライアント側プログラムです。実行時は、サーバー プログラムを最初に実行し、次にクライアント プログラムを実行する必要があり、2 つのコードのポート番号が同じである必要があります。

以上がJavaでの片方向通信のサンプルコードを詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。