//服务器端
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;public class TestServer {
public static void main(String[] args) throws IOException {
//1.建立服务端对象
   ServerSocket ss=new ServerSocket(10001);
   Socket s=ss.accept();//连接客户端
   String ip=s.getInetAddress().getHostAddress();
   System.out.println(ip+".....connected:");
   
//2.读取客户端发来的文件
InputStream in =s.getInputStream(); 


//3.存储读来的文件
File f=new File("C:\\");
if(!f.exists()){f.mkdirs();}
File file=new File(f,ip+".png");
FileOutputStream fos =new FileOutputStream(file);

byte[] b=new byte[1024];
int len=0;
while((len=in.read(b))!=-1){
fos.write(b,0,len);
}


   //返回给客户端信息
                   //就是这部分有问题!
//报告的错误:Software caused connection abort: socket write error
OutputStream out=s.getOutputStream();
out.write("上传成功!".getBytes());

//关闭资源
fos.close();
s.close();
ss.close();
}}
//客户端
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;public class TestClient{ public static void main(String[] args) throws UnknownHostException, IOException {
//1.建立客户端对象
Socket s=new Socket("192.168.1.11",10001);

//2.读取客户端要读取的图片
FileInputStream fis=new FileInputStream("C:\\0.png");

//3.将获取的socket流发送给服务端
OutputStream os=s.getOutputStream();
byte[] buf=new byte[1024];
int len=0;
while((len=fis.read(buf))!=-1){
os.write(buf,0,len);

}
s.shutdownOutput();

//返回文字,告诉客户端发送成功!
                  //这部分有问题
InputStream in=s.getInputStream();
byte[] bufIn=new byte[1024];
int lens=in.read(bufIn);
String text=new String(bufIn,0,lens+1);
System.out.println(text);


fis.close();
s.close();

}}跪求大神帮我看看,不胜感激!JavaC/S存储String

解决方案 »

  1.   

    这是传智播客上面的一段视频,我模仿了怎么都有问题,图片上传成功了,主要是服务器端返回给客户端信息时有问题。我把//返回文字,告诉客户端发送成功!
    InputStream in=s.getInputStream();
    byte[] bufIn=new byte[1024];
    int lens=in.read(bufIn);
    String text=new String(bufIn,0,lens+1);
    System.out.println(text);    //返回给客户端信息
    OutputStream out=s.getOutputStream();
    out.write("上传成功!".getBytes());
    注释掉,程序没有问题。
    顺便,大神们诺是看不惯程序,也可以直接写个简单的服务器与客户端交互的小程序给我膜拜一下!拜托了!
      

  2.   

    是的,我也很纳闷。楼主   在通过socket读取传过来的数据时是不会读到-1的,也就是服务端的这个while((len=in.read(b))!=-1) 循环是不会跳出来的 ,楼主可以试着先传送文件的大小,然后根据传送文件的大小,来判断是否读取完,而不是通过是否读到-1来判断。