当前位置:  开发笔记 > 编程语言 > 正文

Java套接字编程

如何解决《Java套接字编程》经验,为你挑选了2个好方法。

我正在使用java套接字构建一个简单的客户端/服务器应用程序并尝试使用ObjectOutputStream等.

当我讨论通过套接字传输对象时,我一直在这个URL http://java.sun.com/developer/technicalArticles/ALT/sockets开始关注教程.

请参阅我的客户端代码http://pastebin.com/m37e4c577然而,这似乎不起作用,我无法弄清楚什么是不起作用.底部注释掉的代码直接从教程中复制出来 - 当我只使用它而不是创建客户端对象时,这就有效.

任何人都可以看到我做错了吗?



1> Mike Houston..:

问题是您创建流的顺序:

在文章的服务器中(我假设你正在使用它),当打开一个新连接时,服务器首先打开一个输入流,然后打开一个输出流:

public Connect(Socket clientSocket) {
 client = clientSocket;
 try {
  ois = new ObjectInputStream(client.getInputStream());
  oos = new ObjectOutputStream(client.getOutputStream());
 } catch(Exception e1) {
     // ...
 }
 this.start();
}

注释的示例代码使用相反的顺序,首先建立输出流,然后输入流:

// open a socket connection
socket = new Socket("localhost", 2000);
// open I/O streams for objects
oos = new ObjectOutputStream(socket.getOutputStream());
ois = new ObjectInputStream(socket.getInputStream());

但是你的代码反过来做了:

server = new Socket(host, port);
in = new ObjectInputStream(server.getInputStream());
out = new ObjectOutputStream(server.getOutputStream());

建立输出流/输入流对将停止,直到他们交换了握手信息,因此您必须匹配创建顺序.您只需在示例代码中交换第34行和第35行即可.



2> OscarRyz..:

你不是在任何地方写这个对象.

再次看到那个链接,你要写的地方:

 oos.writeObject( new Date() );

在您的代码中,您只有

ois.readObject();

这就是为什么

推荐阅读
k78283381
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有