首頁  >  文章  >  Java  >  Java中有關單向通訊的實例程式碼詳解

Java中有關單向通訊的實例程式碼詳解

黄舟
黄舟原創
2017-09-07 10:34:301991瀏覽

這篇文章主要介紹了Java網路程式設計裡透過套接字實現單向通訊的方法及相關實例,屬於網路程式入門程序,雖然簡單,但具有一定參考價值,需要的朋友可以參考下。

        在網路程式設計中如果只要求客戶機傳送訊息,且不要求伺服器傳送訊息,稱為單線通訊給伺服器。客戶機套接字和伺服器套接字連結成功後,可估計透過輸出流發送數據,伺服器則透過輸入流接受數據,以下是簡單的單向通訊的範例。

        實例1:此實例為TCP伺服器端程序,在 getserver() 方法中建立伺服器套接字,呼叫getClienMessage()方法取得客戶端資訊。程式碼如下:


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

伺服器端運行結果:

伺服器套接字已經建立成功
等待客戶機的連結
客戶機:革命尚未成功,同志仍需努力!

客戶端運行結果:

嘗試連線
完成連線
革命尚未成功,同志仍需努力!

說明:

        當機器上安裝了多個網路應用程序,很可能指定的連接埠號碼已被佔用。也可能遇到以前運作良好的網路程式突然運作不了的情況,這種情況很可能也是因為連接埠被別的程式佔用了。此時使用指令 netstat -an 來查看該程式所使用的連接埠。

        在這裡還有很重要的一點,本文所述兩份原始碼,一個是伺服器端程序,一個是客戶端程式。運行時一定要先執行伺服器端程序,然後執行客戶端程序,而且兩段代碼的連接埠號碼一定要相同。

以上是Java中有關單向通訊的實例程式碼詳解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn