單工客戶端(Client)程式 Socket03
import java.io.BufferedReader; import java.io.DataOutputStream; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.Socket; public class Socket03 { /** * 觸發單工伺服器 * * @param args * @throws IOException */ public static void main(String args[]) throws IOException { BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); System.out.print("請輸入IP: "); String ip = buf.readLine();// 讀取輸入值為IP System.out.print("請輸入連接埠: "); int port = Integer.parseInt(buf.readLine()); // 讀取輸入值為port Socket socket = new Socket(InetAddress.getByName(ip), port);// 建立Socket連線 DataOutputStream outstream = new DataOutputStream(socket.getOutputStream()); outstream.writeUTF("time"); socket.close();// 結束連線 } }
建立socket後至結束連線的過程中,可以夾帶連線中要做的相關工作。
Socket socket = new Socket(InetAddress.getByName(ip), port);// 建立Socket連線 ... ... ... socket.close();// 結束連線送出串流資料須用到 DataOutputStream ,writeUTF方法將字串編成UTF-8格式傳輸。
DataOutputStream outstream = new DataOutputStream(socket.getOutputStream()); outstream.writeUTF("time");
單工主機端(Server)程式 Socket04
import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Socket04 { /** * 單工伺服器 * * @param args * @throws IOException * @throws InterruptedException */ public static void main(String args[]) throws IOException { Socket socket; BufferedReader buf = new BufferedReader(new InputStreamReader(System.in)); System.out.print("請輸入連接埠號: "); String port = buf.readLine(); ServerSocket server = new ServerSocket(Integer.parseInt(port)); System.out.print("本機位址: " + InetAddress.getLocalHost().getHostAddress()); System.out.println(" 開放連接埠: " + port); System.out.println("伺服器已建立, 等待連接..."); while (true) { socket = server.accept(); System.out.println("現在與 " + socket.getInetAddress().getHostAddress() + "連線"); System.out.println("對方的電腦名稱:" + socket.getInetAddress().getHostName()); java.awt.Toolkit.getDefaultToolkit().beep(); socket.close(); } } }
建立伺服器後想要維持不中斷的服務,需要用到無窮迴圈。
while (true) { ... ... ... ... }迴圈中每次建立起來的socket連線在工作結束後中斷,但是在中斷前仍會佔用連線。
while (true) { socket = server.accept(); ... ... ... socket.close(); }
單工 (Simplex) 通訊雙方只能進行單向的資料傳輸 發送端與接收端角色分得很清楚。發送端只能發送訊息出去,不能接收訊息;接收端只能接收訊息,不能發送訊息出去。 例如收音機、電視機,只能接收電視台的節目,但無法發出訊號給電台。
沒有留言:
張貼留言