這篇文章主要介紹了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中文網其他相關文章!