TCPServer與TCPClient
首先直接來看代碼
import java.io.*;
import java.net.Socket;
import java.util.Scanner;
public class TcpClient {
private static final String HOST = "localhost";
private static final int PORT = 9999;
/**
* 基本思路:客戶端發送數據-》客戶端接收數據
* PrintWriter將對象的格式表示打印到文本輸出流
* @param args
*/
public static void main(String[] args) {
try {
Socket socket = new Socket(HOST, PORT);
// 客戶端發送數據IO輸出流
OutputStream os = socket.getOutputStream();
//autoFlush:JSP頁面是否自動刷新
PrintWriter pw = new PrintWriter(os,true);
// 客戶端接收數據IO輸入流
InputStream is = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
// 接收控制檯輸入數據
Scanner sc = new Scanner(System.in);
while(sc.hasNext()){
String line = sc.nextLine();
pw.println(line);
String content = br.readLine();
System.out.println("rev:"+content);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
/**
* 知識點:socket與ServerSocket
* socket可以使一個應用從網絡中讀取和寫入數據,不同計算機上的兩個應用可以通過連接發送和接受字節流,當發送消息時,你需要知道對方的ip和端口,在java中,socket指的是java.net.Socket類。
* 在客戶/服務器通信模式中,ServerSocket負責接收客戶連接請求,並生成與客戶端連接的Socket
* 基本思路:這裏模擬的是同一個IP地址,所以只需要端口號,通過ServerSocket建立起聯繫,服務端先運行起來,服務端接收數據-》服務端發送數據
*/
public class TcpServer {
private static final int PORT = 9999;
public static void main(String[] args) {
try {
ServerSocket server = new ServerSocket(PORT);
// while(true) {
Socket socket = server.accept();
// 服務端接收數據IO輸入流
InputStream inputStream = socket.getInputStream();
InputStreamReader isr = new InputStreamReader(inputStream);
BufferedReader reader = new BufferedReader(isr);
// 服務端發送數據IO輸出流
OutputStream os = socket.getOutputStream();
PrintWriter pw = new PrintWriter(os, true);
String data = null;
while ((data = reader.readLine()) != null) {
System.out.println(data);
pw.println("已經收到數據【"+data+"】");
}
// }
} catch (IOException e) {
e.printStackTrace();
} finally {
}
}
}
錯誤情況
這裏如果直接先運行TCPClient會報錯,這裏牽扯到了Socket與ServerSocket的知識。