黑马程序员技术交流社区
标题:
socket中对象流的传输困惑
[打印本页]
作者:
曾正西
时间:
2012-9-2 11:01
标题:
socket中对象流的传输困惑
各位大神,请教一个问题:我用对象流向socket的流中写实现了序列化的对象,但为什么不能通信呢,调试的时候显示在定义对象流的时候,就阻塞在这儿了,我在对象流的构造方法里写的就是socket中的getInputSream()方法,但是为什么就一直阻塞在这儿了呢,困惑求解
作者:
杨锦
时间:
2012-9-2 11:42
楼主应该把代码贴上来看看
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
public class Client {
public static void main(String[] args) throws Exception {
// 创建客户端Socket, 指定服务端地址和端口, 连接服务器. 本地地址和端口自动绑定.
Socket socket = new Socket("192.168.1.254", 9999);
// 获取客户端输入流, 可以读取服务端写出的数据
InputStream in = socket.getInputStream();
// 获取客户端输出流, 可以写出数据到服务端
OutputStream out = socket.getOutputStream();
// 客户端读取服务端写出的数据. 如果服务端还未写出, 阻塞等待.
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String msg = new String(buffer, 0, len);
System.out.println(msg);
Thread.sleep(3000);
// 客户端写出数据到服务端
out.write("我要报名JavaEE就业班!".getBytes());
// 释放资源
socket.close();
}
import java.io.InputStream;
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 serverSocket = new ServerSocket(9999);
// 阻塞, 等待服务端接收客户端请求
Socket socket = serverSocket.accept();
// 获取服务端输入流, 可以读取客户端写出的数据
InputStream in = socket.getInputStream();
// 获取服务端输出流, 可以写出数据到客户端
OutputStream out = socket.getOutputStream();
Thread.sleep(3000);
// 服务端写出数据到客户端
out.write("欢迎拨打传智播客报名热线, 请问需要什么帮助?".getBytes());
// 服务端读取客户端写出的数据. 如果客户端还未写出, 阻塞等待.
byte[] buffer = new byte[1024];
int len = in.read(buffer);
String msg = new String(buffer, 0, len);
System.out.println(msg);
// 释放资源
socket.close();
serverSocket.close();
}
}
作者:
曾正西
时间:
2012-9-2 12:26
我用的是对象流,ObjectInputStream/ObjectOutputStream,写的是对象,其他跟你这代码差不多
作者:
庄星睿
时间:
2012-9-2 12:52
曾正西 发表于 2012-9-2 12:26
我用的是对象流,ObjectInputStream/ObjectOutputStream,写的是对象,其他跟你这代码差不多 ...
您没贴出代码,我觉得您客户端用的是ObjectOuputStream将对象写入到Socket流中,那么服务端必须还的用ObjectInputStream流才能读取对象,例如:
Client:
ObjectOutputStream oos = new ObjectOutputStream(s.getOutputStream());
oos.writeObject(file);//客户端发送一个文件对象
Server: //服务端接收并读取文件对象
ObjectInputStream ois = new ObjectInputStream(s.getInputStream());
File file = (File) ois.readObject();
作者:
曾正西
时间:
2012-9-2 13:03
嗯,是的,两边都是对象流,不过现在已经解决问题了,还是谢谢你的回答
作者:
AngieFans85
时间:
2012-9-3 08:29
没有代码,无法解决您的问题.
作者:
梁俊
时间:
2013-1-22 00:12
是不是你客户端,
while ((line = br.readLine()) != null) {
pw.println(line);
}
之后
应该写这么一段代码
//通过服务器,你别等了,我已经写完了
s.shutdownOutput();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2