單工客戶端(Client)程式 Socket03
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | 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後至結束連線的過程中,可以夾帶連線中要做的相關工作。
送出串流資料須用到 DataOutputStream ,writeUTF方法將字串編成UTF-8格式傳輸。
1234567Socket socket =
new
Socket(InetAddress.getByName(ip), port);
// 建立Socket連線
...
...
...
socket.close();
// 結束連線
12DataOutputStream outstream =
new
DataOutputStream(socket.getOutputStream());
outstream.writeUTF(
"time"
);
單工主機端(Server)程式 Socket04
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | 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(); } } } |
建立伺服器後想要維持不中斷的服務,需要用到無窮迴圈。
迴圈中每次建立起來的socket連線在工作結束後中斷,但是在中斷前仍會佔用連線。
123456while
(
true
) {
...
...
...
...
}
123456789while
(
true
) {
socket = server.accept();
...
...
...
socket.close();
}
單工 (Simplex) 通訊雙方只能進行單向的資料傳輸 發送端與接收端角色分得很清楚。發送端只能發送訊息出去,不能接收訊息;接收端只能接收訊息,不能發送訊息出去。 例如收音機、電視機,只能接收電視台的節目,但無法發出訊號給電台。
沒有留言:
張貼留言