日期:2014-05-20  浏览次数:20851 次

socket报错啊
/**
 * 这是第一个服务器端程序,让他在9999端口监听
 * 可以接收从客户端发来的信息
 */
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.*;

public class MyServer1 {

public static void main(String[] args) {
MyServer1 ms1=new MyServer1();

}

public MyServer1() {
// TODO Auto-generated constructor stub
try {
//在9999端口监听
ServerSocket ss=new ServerSocket(9999);
System.out.println("我是服务器,在9999端口监听");

//等待某一个客户端来连接,该函数会返回一个socket连接
Socket s=ss.accept();//服务器会阻塞这个地方,没有连接,一直堵着,因此下面11是打印不出来的。
//System.out.println("11");

//要读取s中的传递的数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);

String info = br.readLine();
System.out.println("服务器接收到了:"+info);

PrintWriter pw = new PrintWriter(s.getOutputStream());
pw.println("我是服务器,你也好!");

} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

}

/**
 * 这是一个客户端,可以连接服务器
 */
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.Socket;

public class MyClient1 {
public static void main(String[] args) {
MyClient1 mc1=new MyClient1();
}
public MyClient1() {
try {
//去连接某个服务器端,ip以及端口号
Socket s=new Socket("127.0.0.1",9999);//运行程序,就会打印出11

//如果连接成功,就可以发送数据给服务器
//我们通过pw,向s写数据,true表示即时刷新
PrintWriter pw=new PrintWriter(s.getOutputStream(),true);

pw.println("你好吗?我是客户端");


//要读取s中的传递的数据
InputStreamReader isr=new InputStreamReader(s.getInputStream());
BufferedReader br=new BufferedReader(isr);


String respones=br.readLine();
System.out.println("我是客户端,收到了服务器回送的信息:"+respones);

} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();

}
}


为什么服务器能收到客户端的数据,而客户端报错呢?

java.net.SocketException: Connection reset
at java.net.SocketInputStream.read(Unknown Source)
at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
at sun.nio.cs.StreamDecoder.read(Unknown Source)
at java.io.InputStreamReader.read(Unknown Source)
at java.io.BufferedReader.fill(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at java.io.BufferedReader.readLine(Unknown Source)
at com.hdy.test.MyClient1.<init>(MyClient1.java:32)
at com.hdy.test.MyClient1.main(MyClient1.java:13)


------解决方案--------------------
MyServer1:
PrintWriter pw = new PrintWriter(s.getOutputStream());
改为
PrintWriter pw = new PrintWriter(s.getOutputStream(),true);
------解决方案--------------------
楼上对的,服务器端和客户端即时刷新保持一致

不过还有一点,必须先启动服务器端,再启动客户端。