1 什麼是socket?
-套接字(IP地址+端口)
-java.net包
-對於一個網絡連接來說,套接字是平等的,並沒有差別,不因爲在s或c端而產生不同級別。
-不管是Socket還是ServerSocket他們的工作都是通過SocketImpl類及其子類完成的。
-重要的Socket API。
2 Simple Sample: Server-Client
Server: 服務器,使用ServerSocket監聽指定的端口,端口可以隨意指定(由於1024以下的端口通常屬 於保留端口,在一些操作系統中不可以隨意使用,所以建議使用大於1024的端口),等待客戶 連接請求,客戶連接後,會話產生;在完成會話後,關閉連接。
Client:客戶端,使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;會話完成後,關閉Socket。客戶端不需要指定打開的端口,通常臨時的、動態的分配一個1024以上的端口。
3
/**
* 服務器,使用ServerSocket監聽指定的端口,
* 端口可以隨意指定(由於1024以下的端口通常屬於保留端口,在一些操作系統中不可以隨意使用,
* 所以建議使用大於1024的端口),等待客戶連接請求,客戶連接後,會話產生;
* 在完成會話後,關閉連接。
*/
package socket.entry;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.ServerSocket;
import java.net.Socket;
public class Server {
private Socket socket;
private ServerSocket ss;
public Server() throws IOException {
ss = new ServerSocket(8000);
while (true) {
socket = ss.accept();
BufferedReader br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
System.out.println("you input is : " + br.readLine());
}
}
public static void main(String[] args) {
try {
new Server();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 客戶端,使用Socket對網絡上某一個服務器的某一個端口發出連接請求,一旦連接成功,打開會話;
* 會話完成後,關閉Socket。
*
* 客戶端不需要指定打開的端口,通常臨時的、動態的分配一個1024以上的端口。
*/
package socket.entry;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.UnknownHostException;
public class Client {
Socket client;
PrintWriter pw;
public Client() throws UnknownHostException, IOException {
client=new Socket("127.0.0.1",8000);
pw=new PrintWriter(client.getOutputStream());
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
pw.write(br.readLine());
pw.close();
br.close();
}
public static void main(String[] args) {
try {
new Client();
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}