java socket问题

我客户端有一个列表,我想把它遍历出来,发送给服务器,请问服务器怎么接受?我这有个示例代码:
客户端:
DataOutputStream dd= new DataOutputStream(s.getOutputStream());
ObjectInputStream ois=new ObjectInputStream(fs);
at=(ArrayList)ois.readObject();
Iterator it=at.iterator();

while(it.hasNext()){
dd.writeUTF(it.next().toString());//这里就是我要发送的数据,是循环发送的。
dd.flush();
}

服务器:
DataInputStream dis= new DataInputStream(s.getInputStream());

while((msg=dis.readUTF())!=""){
System.out.println(msg);
}

服务器能接受到数据,但是会阻塞。因为比如说客户端发送的4条记录,服务器msg=dis.readUTF()这句话它会执行5次,结果在第5次这就阻塞了,谁有好的办法解决?
while(true){
msg=dis.readUTF();
System.out.println(msg);
if(dis==null){
break;
}
}

服务器这么改也不行......

恩。。。我觉得是数据流无限等待"response"得问题!比较简单的就是设置一个end符号。。。服务器看到这个符号跳出循环!

while(it.hasNext()){
dd.writeUTF(it.next().toString());//这里就是我要发送的数据,是循环发送的。
dd.flush();
}

===〉

while(it.hasNext()){
dd.writeUTF(it.next().toString());//这里就是我要发送的数据,是循环发送的。

}
dd.writeUTF(This is end symbol);
dd.flush();

while((msg=dis.readUTF())!=""){
System.out.println(msg);
}

====>

while((msg=dis.readUTF())!="" && !endSymbol.equals(msg)){
System.out.println(msg);
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2008-12-05
你定义的ObjectInputStream 发送的对象是要序列化才能行的!还有循环几次不是也跟你list的大小有关的吗?如果你list中的类是序列化的,那么就可以这样做

java 中 Socket编程问题..
在Java中进行Socket编程时,理解其工作原理至关重要。想象一下,A酒店代表服务器,邮递员代表客户端。酒店地址,即IP地址,是双方共同使用的标识。房间号,即端口号,则是用于区分服务器内部的不同服务。关于问题中邮递员如何送信到A酒店101房间,答案是既不需要从自己的房间出发,也不一定非要与房间号...

javasocketjava.net.socketexception:connectionreset
在Java网络编程中,Socket异常是常见问题,它们通常与连接、读取、端口占用和关闭操作有关。以下是对常见Socket异常的解释与解决策略。1. `java.net.SocketTimeoutException`:表示超时错误。分为连接超时和读取超时,连接超时多由网络不稳定引起,读取超时则可能由下游服务响应时间过长导致。检查网络状况和服...

java+socket能抓到包但是无法到达服务器?
如果你使用 Java Socket 抓到了数据包,但是数据包并没有到达服务器,那么这可能是由于以下一些原因导致的:防火墙配置:防火墙可能会阻止某些流量通过,你需要检查服务器的防火墙配置,确保它允许该端口的流量通过。目标端口问题:你需要确保你连接的端口是正确的,服务器上有一个服务在该端口上运行,并且该...

Java Socket常见异常处理
第 个异常是 SocketException: (Connection reset或者Connect reset by peer:Socket write error)该异常在客户端和服务器端均有可能发生 引起该异常的原因有两个 第一个就是如果一端的Socket被关闭(或主动关闭或者因为异常退出而引起的关闭) 另一端仍发送数据 发送的第一个数据包引发该异常(Connect r...

java socket 两个客户端通信问题!
java socket有两种方式。一种是 UDP 这个可以直连,不需要服务器。一种是TCP 这个是肯定要能过服务器来通信的。所以你说的。链接建立完毕后不再通过服务器!这个可以实现,但会麻烦一些。1.先说一下简单的点的吧。用TCP的方式。你所有的消息都是发给服务器。包含你的IP及通信端口,及对方的IP...

java Socket问题:服务器端等待客户端的请求,但是客户端连上后再关闭...
两种办法,1)客户端关闭前 先往服务端写一段特定的信息,服务端捕捉后就把该连接关闭。 这样关闭客户端也不会出错。2)用多线程来处理:1、Server创建 Socket s ; ServerSocket ss 并监听端口 run = true ; while(run) { s = ss.acept();} 2、Client 连接 Server , Server ...

java中如果在关闭Socket时发生一个I\/O错误,则会抛出一个什么异常?_百 ...
java关闭socket时发生错误,有可能抛出IOException异常,如果资源已经关闭了,没有做空值判断,则会出现空指针异常NullException。如果是使用TCP协议通信,由TCP协议是面向连接。所以当客户zhi端关闭后,由于没有预先告诉服务要销毁连接,客户端关闭时(客户与服务异常断开)服务端就会出现异常(空流情况)。这些...

java socket发送报文对方接收不完整是什么原因
这个没有上下文,只能说出集中可能性:1、程序bug(发送不完整,或者接受不完整,跟踪一下码流看看,或者用网络抓包工具分析下,情况太多了)2、网络异常导致丢包(比较少,本身tcp\/ip有重发机制,一般是通过一些工具模拟才会出现或者比较恶劣的网络环境,概率极低)

用java的Socket编写的小小小聊天工具,在本机调试成功,但是在两台能互相...
另:Socket连接容易出问题的地方:1)端口号冲突,服务器无法启动;2)IP地址错误,IP地址分本机地址、局域网地址和广域网地址,在不同的环境下使用不同的地址测试,如果错误将无法被客户端访问,还有如果机器安装了多网卡等问题都会引起错误;3)防火墙禁止Java程序开放端口,不单是服务器机器的软防火墙...

java 问题,我刚刚接触到了一个项目,用到了Socket,我不懂,为什么要用它...
用Socket的目的,就是为了满足这样的需求。怎么通信?服务器启动,监听,然后阻断 客户端连接(比如登录),保持常连接,向服务端发送数据(流),服务器获取数据,处理数据,发送到对应的客户端。客户端接收数据。整个模式,就类似你打电话,先拨号,接通,开始说话,最后挂电话结束。

相似回答
大家正在搜