有错误请指出:联系QQ:1074953453
总结(写在前面):
1.出现了不在本文描述的异常,请阅读之前的文章
Socket异常总结
https://blog.csdn.net/qq_37855039/article/details/99472261
2.本次异常:java.io.EOFException 对象读到末尾时就会抛出的异常,必须手动处理
Server端
package Socket_Job03;
import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
public class Server implements Runnable {
private Socket s;
public Server(Socket s) {
super();
this.s = s;
}
public static void main(String[] args) {
ServerSocket ss = null;
try {
ss = new ServerSocket(12478);
} catch (IOException e) {
e.printStackTrace();
}
while (true) {
try {
Socket s = ss.accept();
if (s!=null) {
new Thread(new Server(s)).start();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
@Override
public void run() {
// Socket s = null;
InputStream is = null;
ObjectInputStream ois = null;
// BufferedReader br = null;
PrintWriter pw = null;
try {
is = s.getInputStream();
ois = new ObjectInputStream(is);
pw = new PrintWriter(s.getOutputStream());
Pet p = (Pet) ois.readObject();
// System.out.println(p);
while (p != null) {
System.out.println(p);
p = (Pet) ois.readObject();
}
}catch (EOFException e){
System.out.println("我读完了");
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
pw.println("注册成功");
pw.flush();
s.shutdownOutput();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
is.close();
s.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
Client端
package Socket_Job03;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class Client2 {
public static void main(String[] args) {
Socket s = null;
OutputStream os = null;
// PrintWriter pw = null;
InputStreamReader isr = null;
BufferedReader br = null;
try {
Client2 c = new Client2();
s = new Socket("127.0.0.1", 12478);
Pet p = c.petRegister();
os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
// pw = new PrintWriter(out);
// pw.println(petMassage);
// pw.flush();
oos.writeObject(p);
oos.flush();
s.shutdownOutput();
isr = new InputStreamReader( s.getInputStream());
br = new BufferedReader(isr);
String str = br.readLine();
while (str != null) {
System.out.println(str);
str = br.readLine();
}
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
// pw.close();
// out.close();
s.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/**
* 用字符模式 id:mima 的字符创作为返回值
* @return 返回用户的注册信息
*
*/
private Pet petRegister() {
Scanner sc = new Scanner(System.in);
System.out.println("PetRegister(宠物注册)");
System.out.println("请输入宠物的姓名:");
String name = null;
if (sc.hasNext()) {
name = sc.next();
}
System.out.println("请输入宠物的品种:");
String type = null;
if (sc.hasNext()) {
type = sc.next();
}
System.out.println("请输入宠物的性别: ");
String sex = null;
if (sc.hasNext()) {
sex = sc.next();
}
Pet p = new Pet(name, type, sex);
return p;
}
}