一个最简单的socket的小程序,为什么会出现java.net.SocketException Connection reset by peer?

bubblebird 2004-08-09 03:22:45
程序很简单:

ServerSocket s = new ServerSocket(PORT);
Socket socket = s.accept();
BufferedReader in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));

String str = "";
while (true) {
str = in.readLine();
if (str.equals(".")) break;
System.out.println(str);
}

出现异常是在in.readLine()
为什么?不能这样读吗?

...全文
513 16 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
orrin 2004-08-10
  • 打赏
  • 举报
回复
应该是服务器与客户端异常中断导致的,断开应该加判断。
dlab 2004-08-10
  • 打赏
  • 举报
回复
小问题也是问题
napoleonz 2004-08-10
  • 打赏
  • 举报
回复
New SocketExceptions in JDK1.1

This exception is raised when a connection is refused at the remote host (i.e., no process is listening on that port)

你的"Connection reset by peer"异常是网络连接本身的问题.
程序本身没有问题!
ntzls 2004-08-10
  • 打赏
  • 举报
回复
班门弄斧

试用本机充当s & c进行测试,192.168.0.1,可能影响的程序如防火墙关掉,正常运行可排除程序BUG。再放在局域网中测试。还不行确认TCP/IP协议正常。

没看见你的完整服务器端、客户端程序。
lotofu 2004-08-10
  • 打赏
  • 举报
回复
你的客户端socket被(异常)关闭了
qqbz 2004-08-10
  • 打赏
  • 举报
回复
1、最好不要用readline()网络上传的都是字符,一般用读字节或字节数组的办法处理。
2、要定义好两端传输的数据格式。并检查每次发送接受都是严格按协议格式的。
bubblebird 2004-08-10
  • 打赏
  • 举报
回复
换成用DataInputStream来读我也试过了,一样出现异常
java.net.SocketException: Connection reset by peer: JVM_recv in socket input stream read

to:zhang21cnboy
请问你说的客户端socket没有设置超时是指什么?
我用了
Socket socket = s.accept();
socket.setSoTimeout(20000);
这样也不行
anotherleeo 2004-08-10
  • 打赏
  • 举报
回复
读的时候不要直接用Buffered的方法实现InputStream。
DataInputStream in=new DataInputStream(new BufferedInputStream(socket.getInputStream()));
这样就ok了。
DataInputStream 的方法也比较多。
readLine()在java 1.4中已不推荐使用。
建议使用readUTF();
zhang21cnboy 2004-08-10
  • 打赏
  • 举报
回复
你的客户端socket没有设置超时。。。
hq1305018 2004-08-10
  • 打赏
  • 举报
回复
以下是我测试用的客户端,与你的服务器端程序一起运行正常,你的客户端有问题吗?还有就是你的网络的问题了。
import java.net.*;
import java.io.*;

public class TestSocketClient{
public static void main(String[] args)
{
String serviceHost = "10.34.52.51";
int servicePort = 7777;

java.net.Socket socket=null;
BufferedReader reader=null;
PrintWriter out=null;
try
{
socket = new java.net.Socket(serviceHost,servicePort);
System.out.println("client socket: " + socket);

reader = new BufferedReader (new InputStreamReader(System.in));

out=new PrintWriter(socket.getOutputStream());

String str="";
do{
str=reader.readLine();
System.out.println("out:"+str);
out.println(str);
}while(!str.equals("."));

}
catch (IOException ex)
{
ex.printStackTrace();
}
catch(Exception ex)
{
ex.printStackTrace();
}
finally
{
try
{
reader.close();
out.close();
socket.close();
}
catch (IOException ex)
{
ex.printStackTrace();
}
}
}
}
bubblebird 2004-08-10
  • 打赏
  • 举报
回复
都作了,没用
bubblebird 2004-08-10
  • 打赏
  • 举报
回复
谢谢各位了,还是防火墙的问题
djkhym 2004-08-10
  • 打赏
  • 举报
回复
qazxsw1982103(波斯猫) 说的对,应该加入异常处理。
qazxsw1982103 2004-08-10
  • 打赏
  • 举报
回复
你的程序在我的机器上运行正常~
qazxsw1982103 2004-08-09
  • 打赏
  • 举报
回复
你是不是没有异常处理啊?

import java.io.*;
import java.net.*;

class ccc
{
public static void main(String[] agrs)throws Exception
{

ServerSocket s = new ServerSocket(7777);
Socket socket = s.accept();
BufferedReader in =
new BufferedReader(
new InputStreamReader(
socket.getInputStream()));

String str = "";
while (true)
{
str = in.readLine();

if (str.equals("."))
break;
System.out.println(str);
}
}
}
bubblebird 2004-08-09
  • 打赏
  • 举报
回复
各位进来看看啊,帮帮忙

67,550

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧