您好,登錄后才能下訂單哦!
在網絡編程中如果只要求客戶機向服務器發送消息,不要求服務器向客戶機發送消息,稱為單線通信。客戶機套接字和服務器套接字鏈接成功后,可估計通過輸出流發送數據,服務器則通過輸入流接受數據,下面是簡單的單向通信的例子。
實例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 來查看該程序所使用的端口。
在這里還有很重要的一點,本文所述兩份源碼,一個是服務器端程序,一個是客戶端程序。運行時一定要先運行服務器端程序,然后運行客戶端程序,而且兩段代碼的端口號一定要相同。
以上就是本文的全部內容,真心希望對大家有所幫助。學習是一件任重道遠的事情,那句老話說得好:革命尚未成功,同志仍需努力!
感謝大家對本站的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。