這是一個使用Java Socket 進行客戶端和服務器進行通信的簡單例子。
有些考試裏頭會讓寫這方面的程序,自己動手寫寫,掌握這個實現過程。理解之後,很快就能寫出來了。
而且這個題目值 10 分。
服務器端代碼:Server.java
[CODE]
import java.net.*;
import java.io.*;
class Server {
private ServerSocket server;
private Socket client;
private BufferedReader in;
private PrintWriter out;
Server(){
try{
server = new ServerSocket(1234);
while(true){
//獲得客戶端連接
client = server.accept();
//獲得客戶端的IP和端口
String remoteIP = client.getInetAddress().getHostAddress();
int remotePort = client.getLocalPort();
System.out.println("A client connected. IP:" + remoteIP + ", Port: " + remotePort);
System.out.println();
//獲得 client 端的輸入輸出流,爲進行交互做準備
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
out = new PrintWriter(client.getOutputStream(),true);
//獲得 client 端發送的數據
String content = in.readLine();
System.out.println("Client message is: " + content);
// 向 client 端發送響應數據
out.println("Your message has been received successfully.");
//關閉各個流
out.close();
in.close();
server.close();
}
}catch(Exception e){
// 發送響應,接收失敗
out.println("Receive Error!");
}
}
public static void main(String[] args){
new Server();
}
}
[CODE]
客戶端代碼:Client.java
[CODE]
import java.io.*;
import java.net.*;
class Client {
private Socket client;
String serverAddress = "127.0.0.1";
int port = 1234;
BufferedReader in;
PrintWriter out;
Client(){
try{
//連接 server 端
System.out.println("Try connect to server ...");
client = new Socket(serverAddress,port);
//顯示已連接
System.out.println("Conntected to Server.");
System.out.println();
//爲發送數據做準備
System.out.println("Enter some characters:");
in = new BufferedReader(new InputStreamReader(System.in));
out = new PrintWriter(client.getOutputStream(),true);
// 向 server 發送數據
out.println(in.readLine() + "/n");
System.out.println();
//接收來自 server 的響應數據
in = new BufferedReader(new InputStreamReader(client.getInputStream()));
System.out.println("Message from server: " + in.readLine());
// 關閉各個流
in.close();
out.close();
client.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args){
new Client();
}
}
[CODE]
打開兩個終端:
終端一:
javac Server.java
java Server
終端二:
javac Client.java
java Client
即可看到運行結果。
附加一個更加簡單的例子, client 端只接收來自 server 端的消息並顯示。
服務器端代碼:Server.java
[CODE]
import java.net.*;
import java.io.*;
class Server {
private ServerSocket server;
private Socket client;
private int port = 5050;
Server() {
try {
server = new ServerSocket(port);
client = server.accept();
client.getOutputStream().write("dtmobile".getBytes());
client.close();
server.close();
} catch(Exception e) {
}
}
public static void main(String[] args) {
new Server();
}
}
[CODE]
客戶端代碼:Client.java
[CODE]
import java.net.*;
import java.io.*;
class Client {
private Socket client;
private String host = "127.0.0.1";
private int port = 5050;
Client() {
try {
client = new Socket(host, port);
InputStream in = client.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in));
String content = br.readLine();
System.out.println(content);
} catch(Exception e) {
}
}
public static void main(String[] args) {
new Client();
}
}