问题: 双向通信的时候, 包没有按照老师一样命名, 一直报错:java.net.SocketException: Connection reset
代码如下
1-客户端:
package com.bzsxt.client;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.Scanner;
public class TestClient {
public static void main(String[] args) throws UnknownHostException, IOException {
// (1)创建Socket对象,用于连接服务器
Socket client = new Socket("localhost", 10001);
// (2)获取输出流 (对象流)
ObjectOutputStream oos = new ObjectOutputStream(client.getOutputStream());
// (3)创建User对象
// 调用获取用户对象的方法
//User u = getUser();// new User("bjsxt", "bjsxt");
User u = new User("bjsxt", "bjsxt");
// (4)User对象发送到服务器
oos.writeObject(u);
// (5)获取输入流(数据流)
DataInputStream dis = new DataInputStream(client.getInputStream());
System.out.println(dis.readUTF());
// (6)关闭流
if (dis != null) {
dis.close();
}
if (oos != null) {
oos.close();
}
if (client != null) {
client.close();
}
}
// 获取用户对象的方法
public static User getUser() {
Scanner input = new Scanner(System.in);
System.out.println("请输入用户名:");
String userName = input.next();
System.out.println("请输入密码:");
String password = input.next();
// 封装成User对象
return new User(userName, password);
}
}
2-实例类:
package com.bzsxt.client;
import java.io.Serializable;
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8868213509492563406L;
private String userName;
private String pwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [userName=" + userName + ", pwd=" + pwd + "]";
}
public User(String userName, String pwd) {
super();
this.userName = userName;
this.pwd = pwd;
}
public User() {
super();
}
}
3-服务器端:
package com.bzsxt.server;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.net.ServerSocket;
import java.net.Socket;
import com.bzsxt.entity.User;
public class TestServer {
public static void main(String[] args) throws IOException, ClassNotFoundException {
ServerSocket server = new ServerSocket(10001);
System.out.println("服务端开启");
Socket socket = server.accept();
ObjectInputStream oStream = new ObjectInputStream(socket.getInputStream());
User user = (User) oStream.readObject();
String data = "";
System.out.println(socket.getInetAddress().getHostAddress()+"请求登录:用户名"+user.getUserName()+"\t密码:"+user.getPwd());
System.out.println("----"+user.getUserName());
System.out.println("----"+user.getPwd());
if ("bzsxt".equals(user.getUserName())&&"bzsxt".equals(user.getPwd())){
data = "登录成功";
}else {
data= "登录失败";
}
DataOutputStream dStream = new DataOutputStream(socket.getOutputStream());
dStream.writeUTF(data);
//socket.shutdownOutput();
if (dStream!=null) {
dStream.close();
}if (oStream!=null) {
oStream.close();
}if (socket!=null) {
socket.close();
}
}
}
4-实体类:
package com.bzsxt.entity;
import java.io.Serializable;
public class User implements Serializable{
/**
*
*/
private static final long serialVersionUID = 8868213509492563406L;
private String userName;
private String pwd;
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
@Override
public String toString() {
return "User [userName=" + userName + ", pwd=" + pwd + "]";
}
public User(String userName, String pwd) {
super();
this.userName = userName;
this.pwd = pwd;
}
public User() {
super();
}
}
截图结果:




源码:
client.zip
server.zip