JAVA網路程式設計(2)TCP程式設計
2.1 需求描述
功能描述:實現類似QQ
、微信、郵箱的網路登入功能,可以多個使用者同時登入。為了便於理解,進行功能分解迭代、分為一次單向通訊、一次雙向通訊、傳輸物件、引入多執行緒來分別實現。
- 需要分別開發一個客戶端程式及一個伺服器程式
- 伺服器需要處於開啟狀態
- 伺服器需要在某個埠監聽客戶端請求
- 客戶端訪問伺服器,必須知道伺服器的
IP
及埠
2.2 一次單項通訊
//伺服器端程式碼實現
public class LoginServer {
public static void main(String[] args) throws IOException {
//開啟服務,指定監聽埠
ServerSocket socketServer = new ServerSocket(8080);
//在等待的介面監聽
Socket socket = socketServer.accept(); //等待客戶端連線,沒有連線程式在此阻塞
//接收資料
InputStream is = socket.getInputStream();
DataInputStream dis = new DataInputStream(is);
String s = dis.readUTF();
System.out.println("使用者登入資訊:" + s);
//關閉資源
dis.close();
//socket.close(); //不需要手動關閉
socketServer.close(); //需要手動關閉
}
}
//客戶端程式碼實現
public class LoginClient {
public static void main(String[] args) throws IOException {
//建立socket連線
Socket socket = new Socket("127.0.0.1",8080);
//傳送資料
OutputStream os = socket.getOutputStream();
DataOutputStream dos = new DataOutputStream(os);
dos.writeUTF("username=fyy&password=123456");
//關閉連線
dos.close();
//socket.close(); //不需要手動關閉
}
}
2.3 一次雙向通訊
//伺服器端程式碼實現
public class LoginServer {
public static void main(String[] args) throws IOException {
//開啟服務,指定監聽埠
ServerSocket socketServer = new ServerSocket(8080);
//在等待的介面監聽
Socket socket = socketServer.accept(); //等待客戶端連線,沒有連線程式在此阻塞
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//接收資料
String s = dis.readUTF();
System.out.println("使用者登入資訊:" + s);
//傳送資料
dos.writeUTF("使用者登入成功!");
//關閉資源
dis.close();
dos.close();
//socket.close(); //不需要手動關閉
socketServer.close(); //需要手動關閉
}
}
//客戶端程式碼實現
public class LoginClient {
public static void main(String[] args) throws IOException {
//建立socket連線
Socket socket = new Socket("127.0.0.1",8080);
DataInputStream dis = new DataInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//傳送資料
dos.writeUTF("username=fyy&password=123456");
String str = dis.readUTF();
System.out.println("伺服器返回資料:" + str);
//關閉連線
dos.close();
dis.close();
//socket.close(); //不需要手動關閉
}
}
2.4 一次雙向通訊,傳輸物件
//伺服器端程式碼實現
public class LoginServer {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//開啟服務,指定監聽埠
ServerSocket socketServer = new ServerSocket(8080);
//在等待的介面監聽
Socket socket = socketServer.accept(); //等待客戶端連線,沒有連線程式在此阻塞
ObjectInputStream ois = new ObjectInputStream(socket.getInputStream());
DataOutputStream dos = new DataOutputStream(socket.getOutputStream());
//接收資料
User user = (User) ois.readObject();
System.out.println("使用者名稱:" + user.getUserId());
System.out.println("密碼:" + user.getPassword());
//響應請求
if(user.getUserId().equals("admin") && user.getPassword().equals("123")){
dos.writeUTF("使用者登入成功!");
}else{
dos.writeUTF("使用者名稱/密碼錯誤!");
}
//關閉資源
ois.close();
dos.close();
//socket.close(); //不需要手動關閉
socketServer.close(); //需要手動關閉
}
}
//客戶端程式碼實現
public class LoginClient {
public static void main(String[] args) throws IOException {
//建立socket連線
Socket socket = new Socket("127.0.0.1",8080);
DataInputStream dis = new DataInputStream(socket.getInputStream());
ObjectOutputStream oos = new ObjectOutputStream(socket.getOutputStream());
//獲取鍵盤輸入,封裝成User物件
Scanner input = new Scanner(System.in);
System.out.println("請輸入使用者名稱:");
String userId = input.next();
System.out.println("請輸入密碼:");
String password = input.next();
User user = new User(userId,password);
//傳送資料
oos.writeObject(user);
//獲取返回資料
String str = dis.readUTF();
System.out.println("伺服器返回資料:" + str);
//關閉連線
oos.close();
dis.close();
//socket.close(); //不需要手動關閉
}
}
//封裝的User物件
public class User implements Serializable {
private String userId;
private String password;
public User(){
}
public User(String userId,String password){
this.userId = userId;
this.password = password;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
@Override
public String toString() {
return "User{" +
"userId='" + userId + '\'' +
", password='" + password + '\'' +
'}';
}
}
2.5 TCP檔案上傳
//伺服器端編碼實現
public class UpServer {
public static void main(String[] args) throws IOException {
ServerSocket socketServer = new ServerSocket(8088);
Socket socket = socketServer.accept();
String dFilePath = "F:\\test2.txt";
try ( //建立檔案輸入輸出流
BufferedInputStream bis = new BufferedInputStream(socket.getInputStream());
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(dFilePath));
){
//讀取檔案
byte[] buf = new byte[1024];
int len;
while ((len = bis.read(buf)) != -1){
bos.write(buf,0,len);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
//客戶端編碼實現
public class UpClient {
public static void main(String[] args) throws IOException {
String sFilePath = "F:\\test.txt";
Socket socket = new Socket("127.0.0.1",8088);
try ( //建立檔案輸入輸出流
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(sFilePath));
BufferedOutputStream bos = new BufferedOutputStream(socket.getOutputStream());
){
//讀取檔案
byte[] buf = new byte[1024];
int len;
while ((len = bis.read(buf)) != -1){
bos.write(buf,0,len);
}
}catch (Exception e){
e.printStackTrace();
}
}
}
相關文章
- Java 網路程式設計(TCP程式設計 和 UDP程式設計)Java程式設計TCPUDP
- java網路程式設計(TCP詳解)Java程式設計TCP
- python網路-Socket之TCP程式設計(26)PythonTCP程式設計
- 【網路程式設計】Tcp/Udp程式設計TCPUDP
- Java 網路程式設計 – TCP協議基本步驟Java程式設計TCP協議
- Java 網路程式設計 —— 非阻塞式程式設計Java程式設計
- 網路程式設計中TCP與UDP程式設計TCPUDP
- 網路程式設計TCP/IP詳解程式設計TCP
- Java 網路程式設計Java程式設計
- JAVA網路程式設計Java程式設計
- Python 網路資料傳輸協議 TCP 程式設計Python協議TCP程式設計
- UDP&TCP Linux網路應用程式設計詳解UDPTCPLinux程式設計
- 《Unix 網路程式設計》05:TCP C/S 程式示例程式設計TCP
- Linux網路程式設計(2)Linux程式設計
- 網路通訊程式設計程式設計
- py網路工具程式設計程式設計
- Java&Python的TCP&UDP通訊-網路程式設計JavaPythonTCPUDP程式設計
- Java:基於TCP協議網路socket程式設計(實現C/S通訊)JavaTCP協議程式設計
- java多執行緒實現TCP網路Socket程式設計(C/S通訊)Java執行緒TCP程式設計
- java 網路程式設計01Java程式設計
- Java--網路程式設計Java程式設計
- Java中神經網路Triton GPU程式設計Java神經網路GPU程式設計
- 第五講 TCP程式設計TCP程式設計
- Java實驗六: Java流式程式設計與網路程式設計(頭歌)Java程式設計
- 【go網路程式設計】-HTTP程式設計Go程式設計HTTP
- Go語言中的TCP/IP網路程式設計GoTCP程式設計
- python 網路篇(網路程式設計)Python程式設計
- Java高階程式設計筆記 • 【第4章 網路程式設計】Java程式設計筆記
- Java網路程式設計:QQ郵件傳送客戶端程式設計Java程式設計客戶端
- Java015-網路程式設計Java程式設計
- Java 網路程式設計----初探ServletJava程式設計Servlet
- JAVA網路程式設計基礎Java程式設計
- Java網路程式設計之UDPJava程式設計UDP
- 基本TCP套接字程式設計APITCP程式設計API
- 程式設計和網路程式設計入門程式設計
- 好程式設計師Java培訓分享Java程式設計技巧程式設計師Java
- Java網路程式設計和NIO詳解3:IO模型與Java網路程式設計模型Java程式設計模型
- Java程式設計師學習Rust程式設計 - infoworldJava程式設計師Rust