问题描述
我正在将客户端的Object发送给服务器,在服务器端修改该对象并将其重新发送到客户端。从客户端发送对象到服务器很好,它正常工作,但当我发回对象时,它会给出异常Socket关闭。这是代码。
IntString和ParentObj是我发送对象的类。
I am sending Object for client to server modifying that object at server side and resending it to client. Sending object form client to server is fine its working properly but when I am sending object back it gives exception Socket is closed. Here is code.IntString and ParentObj are classes of which I'm sending objects.
Client1类:
import java.net.*;
import java.io.*;
public class Client1 {
public static void main(String args[]) {
int arr[] = new int[10];
int length = 6, i, counter_1;
ParentObj obj1;
for (i = 0; i < length; i++) {
arr[i] = i + 10;
}
try {
Socket s = new Socket("localhost", 6789);
IntString obj = new IntString(arr, length);
/*
* OutputStream os = s.getOutputStream();
* ObjectOutputStream oos = new ObjectOutputStream(os);
*
* oos.writeObject(obj);
* oos.close();
* os.close();
*/
Send_recv snd = new Send_recv(s);
snd.sendObj((ParentObj) obj);
if (s.isClosed()) {
System.out.println("Closed");
// s.connect(null);
}
obj1 = snd.recObj();
obj = (IntString) obj1;
if (obj != null) {
for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
System.out.println(obj.row[counter_1]);
obj.row[counter_1]++;
}
}
// s.close();
} catch (Exception e) {
System.out.println(e);
}
}
}
服务器类
import java.net.*;
import java.io.*;
public class Server1 {
public static void main(String args[]) {
IntString obj;
ParentObj obj1;
int port = 6789, counter_1;
try {
ServerSocket ss = new ServerSocket(port);
Socket s = ss.accept();
Send_recv rev = new Send_recv(s);
/*
* InputStream is = s.getInputStream();
* ObjectInputStream ois = new ObjectInputStream(is);
* IntString obj = (IntString)ois.readObject();
*/
obj1 = rev.recObj();
obj = (IntString) obj1;
System.out.println(s.getInetAddress());
System.out.println(s.getLocalAddress());
if (obj != null) {
for (counter_1 = 0; counter_1 < obj.length_of_row; counter_1++) {
System.out.println(obj.row[counter_1]);
obj.row[counter_1]++;
}
}
if (ss.isClosed()) {
System.out.println("Closed ss");
}
if (s.isClosed()) {
System.out.println("Closed in Server");
}
Send_recv snd = new Send_recv(s);
snd.sendObj((ParentObj) obj);
} catch (Exception e) {
System.out.println(e + "In Server");
}
}
}
Send_recv class用于发送和接收对象。
Send_recv class for sending and receiving objects.
import java.io.*;
import java.net.*;
public class Send_recv {
Socket s;
IntString obj1;
public Send_recv(Socket s) {
this.s = s;
}
public void sendObj(ParentObj obj) {
try {
OutputStream os = s.getOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(os);
oos.writeObject(obj);
oos.close();
os.close();
} catch (Exception e) {
System.out.println(e);
}
}
public ParentObj recObj() {
try {
InputStream is = s.getInputStream();
ObjectInputStream ois = new ObjectInputStream(is);
obj1 = (IntString) ois.readObject();
ois.close();
is.close();
} catch (Exception e) {
System.out.println(e);
}
return (obj1);
}
}
推荐答案
java.net.SocketException socket is closed
此异常表示你关闭套接字,然后继续尝试使用它。
This exception means that you closed the socket, and then continued to try to use it.
os.close();
你在这里关闭它。关闭 Socket
的输入或输出流将关闭另一个流和 Socket。
And you closed it here. Closing either the input or the output stream of a Socket
closes the other stream and the Socket.
这篇关于java.net.SocketException套接字已关闭的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!