import java.io.*;
import java.net.*;class Client
{
public static void main(String[] args) throws Exception
{

Socket s = new Socket("ip",10008);
BufferedReader bufr = new BufferedReader(new FileReader("Xxx.java"));
PrintWriter pwOut = new PrintWriter(s.getOutputStream(),true);
BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream())); 
String str = null; String line = null;
while((line=bufr.readLine())!=null)
{
pwOut.println(line);
}

s.shutdownOutput(); str = bufIn.readLine();
System.out.println("server:"+str); bufr.close();
s.close();
}
}class Server
{
public static void main(String[] args)throws Exception
{
ServerSocket ss = new ServerSocket(10008);
Socket s = ss.accept(); String ip = s.getInetAddress().getHostAddress();
System.out.println(ip+"....connected"); BufferedReader bufIn = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintWriter pw = new PrintWriter(System.out,true);

String line = null;
while((line=bufIn.readLine())!=null)
{
pw.println(line);
} PrintWriter pwOut = new PrintWriter(s.getOutputStream(),true); String str = "上传成功";
pwOut.println(str); pw.close();
s.close();
ss.close();
}
}
以上代码,客户端能接收到服务端文件,但是服务端得不到客户端的反馈消息,输出为:server:null
这是什么原因呢?

解决方案 »

  1.   

     s.shutdownOutput();这个把输出输入通道关闭了。
      

  2.   


    shutdownOutput()给出的解释是:对于 TCP 套接字,任何以前写入的数据都将被发送,并且后跟 TCP 的正常连接终止序列。
    它仅仅是一个结束标记,通知服务端结束传输。而关闭通道是用close()。
      

  3.   


    我就不知道了,在我的电脑上就回复null,好像在有些人的电脑上就行,是配置的问题吗?
      

  4.   

    刚刚测试了下:
    将ip设为ipv6的地址,就能得到服务器上传成功的反馈;
    原先设的是ipv4的地址,得到的是null;
    这是什么原因呢?