我的问题如下注释,那个服务端那里怎么改,老是意外处理了???
程序实现最简单的收发功能,客户段没问题,服务端注释那个地方有问题
平台eclipase服务端
------------------------------------------------------
/*
 * Created on 2005-6-19
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package zhao;/**
 * @author xiaozhao
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.io.*;
import java.net.*;
public class serve { public static void main(String[] args)throws Exception {

int port=8080;       
System.out.println("server had launch");

try{
ServerSocket s=new ServerSocket(port);
Socket socket=s.accept();
DataInputStream input=new DataInputStream(socket.getInputStream());
        DataOutputStream output=new DataOutputStream(socket.getOutputStream());
        
while(true)
{
// System.out.println("----");
String message=input.readUTF();  //这里出错,在第2次收到消息的时候就出错了(第一次收到消息正常),请问怎么改阿???
if(message=="end")
break;
else
System.out.println("receive messages: "+message);
// output.writeUTF("had received");

}
socket.close();
    s.close();
}catch(IOException e){System.out.println("error"); }


}
}
客户段
------------------------------------------------------------
/*
 * Created on 2005-6-19
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package zhao;/**
 * @author xiaozhao
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
import java.io.*;
import java.net.*;
public class client { public static void main(String[] args)throws IOException {

int port=8080;
InetAddress addr=InetAddress.getByName("localhost");
System.out.println("localhost="+addr);

try{
Socket socket=new Socket(addr,port);
// DataInputStream input=new DataInputStream(socket.getInputStream());
DataOutputStream output=new DataOutputStream(socket.getOutputStream());
    
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
    String message=in.readLine();
    output.writeUTF(message);
}catch(IOException e){System.out.println("error");};

}
}

解决方案 »

  1.   

    String message=input.readUTF();  //这里出错,在第2次收到消息的时候就出错了(第一次收到消息正常),请问怎么改阿???
    if(message=="end")
    break;---------------------------------
    第一次接受消息时,有没有用“end”把 socket.close()了?
      

  2.   

    你的问题是客户端发送一次后就推出了SOCKET,所以再服务器段会出现,peer reset的错误信息。
    正确的程序如下。客户端:package test;import java.io.*;
    import java.net.*;public class Client {    public static void main(String[] args) throws IOException {        int port = 8080;
            InetAddress addr = InetAddress.getByName("localhost");
            System.out.println("localhost=" + addr);        try {
                Socket socket = new Socket(addr, port);
                // DataInputStream input=new
                // DataInputStream(socket.getInputStream());
                DataOutputStream output = new DataOutputStream(socket
                        .getOutputStream());            BufferedReader in = new BufferedReader(new InputStreamReader(
                        System.in));
                String message = in.readLine();
                while (!message.equals("end")) {
                    output.writeUTF(message);
                    message = in.readLine();
                }        } catch (IOException e) {
                System.out.println("error");
            };    }
    }服务器端:
    package test;import java.io.*;
    import java.net.*;public class Server {    public static void main(String[] args) throws Exception {        int port = 8080;
            System.out.println("server had launch");        try {
                ServerSocket s = new ServerSocket(port);
                Socket socket = s.accept();
                DataInputStream input = new DataInputStream(socket.getInputStream());
                DataOutputStream output = new DataOutputStream(socket
                        .getOutputStream());            while (true) {
                    // System.out.println("----");
                    String message = input.readUTF(); 
                    if (message.equals("end")) break;
                    else System.out.println("receive messages: " + message);
                    // output.writeUTF("had received");
                }
                socket.close();
                s.close();
            } catch (IOException e) {
                System.out.println("error");
            }    }
    }