單工客戶端(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) 通訊雙方只能進行單向的資料傳輸 發送端與接收端角色分得很清楚。發送端只能發送訊息出去,不能接收訊息;接收端只能接收訊息,不能發送訊息出去。 例如收音機、電視機,只能接收電視台的節目,但無法發出訊號給電台。



沒有留言:
張貼留言