UserInfo.javajava
package com.company.s6; import java.io.Serializable; public class UserInfo implements Serializable { private long id; private String username; private String password; public UserInfo() { } public UserInfo(long id, String username, String password) { this.id = id; this.username = username; this.password = password; } public long getId() { return id; } public void setId(long id) { this.id = id; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
Server.javasocket
package com.company.s6; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.ServerSocket; import java.net.Socket; public class Server { public static void main(String[] args) throws Exception{ ServerSocket serverSocket=new ServerSocket(8888); Socket socket=serverSocket.accept(); InputStream inputStream=socket.getInputStream(); OutputStream outputStream=socket.getOutputStream(); ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream); ObjectInputStream objectInputStream=new ObjectInputStream(inputStream); for(int i=0;i<5;i++){ UserInfo userInfo=(UserInfo) objectInputStream.readObject(); System.out.println("在服務端打印 "+(i+1)+":"+userInfo.getId()+" "+userInfo.getUsername()+" "+userInfo.getPassword()); UserInfo newUserInfo=new UserInfo(); newUserInfo.setId(i+1); newUserInfo.setUsername("servername"+(i+1)); newUserInfo.setPassword("serverpassord"+(i+1)); objectOutputStream.writeObject(newUserInfo); } objectOutputStream.close(); objectInputStream.close(); outputStream.close(); inputStream.close(); socket.close(); serverSocket.close(); } }
Client.javathis
package com.company.s6; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputStream; import java.net.Socket; public class Client { public static void main(String[] args) throws Exception{ Socket socket=new Socket("localhost",8888); InputStream inputStream=socket.getInputStream(); OutputStream outputStream=socket.getOutputStream(); ObjectInputStream objectInputStream=new ObjectInputStream(inputStream); ObjectOutputStream objectOutputStream=new ObjectOutputStream(outputStream); for(int i=0;i<5;i++){ UserInfo newUserinfo=new UserInfo(); newUserinfo.setId(i+1); newUserinfo.setUsername("clientUserName:"+(i+1)); newUserinfo.setPassword("clientPassword:"+(i+1)); objectOutputStream.writeObject(newUserinfo); UserInfo userInfo=(UserInfo)objectInputStream.readObject(); System.out.println("在客戶端打印:"+(i+1)+":"+userInfo.getId()+" "+userInfo.getUsername()+" "+userInfo.getPassword()); } objectInputStream.close(); objectOutputStream.close(); outputStream.close(); inputStream.close(); socket.close(); } }
ps:若是服務端先獲取objectInputStream對象,而後獲取objectOutPutStream對象;spa
若是客戶端也是一樣的順序獲取對象,這樣的話在運行時會在服務端的程序代碼:.net
ObjectInputStream objectInputStream=new ObjectInputStream(inputStream);code
出現阻塞的現象。server
正確的寫法應該是:對象
1:服務端先得到ObjectInputStream對象,客戶端就要先得到ObjectOutPutStream對象;blog
2:服務端先得到ObjectOutPutStream對象,客戶端就要先得到ObjectInPutStream對象;get