我是套接字编程,android工作室和Java整体的新手,所以请原谅我的代码中缺乏经验和混乱 . 这也是我第一次在这里提问 . 我最初使用DataOutputStream,因为我也用于发送图像,但是使用BufferedWriter让服务器发送回复,因为readUTF函数似乎不起作用而且'resultfromServer'变量保持“”即使我看到的答案关于我已经使用的AsyncTask建议 . 使用它的行被评论 . 客户端应该将图像发送到服务器和PC上的服务器,并且服务器应该将文件的内容作为字符串发回 . 最初服务器应该等待几秒钟,客户端也会等待,以便模拟处理,但我评论该部分用于测试目的 . 我的Java IDE是记事本 . 这段代码是许多在线教程的结果,我浪费了几周试图调试它 . 出于测试目的,我将简化形式的客户端代码传输到Java并在PC上运行客户端和服务器 . 不处理图像发送 . 这是代码 .

import java.util.*;
import java.io.*;
import java.awt.image.BufferedImage;
import java.net.*;
import javax.imageio.ImageIO;
import java.lang.*;


class myServerTry
{

public static void main(String[] args) throws InterruptedException{


    ServerSocket serverSocket;
    Socket socket;
    DataInputStream dis;
    int len;
    String somestring="";

    try {
        serverSocket = new ServerSocket(9998);
        System.out.println("waiting\n");
        while( (true)){

        socket = serverSocket.accept();
        InputStream is=socket.getInputStream();
        dis=new DataInputStream(is);
        len= dis.readInt(); //originally the length of the data input stream.

            System.out.println("Received integer: " +len);
        //while(somestring==""){
            //somestring= dis.readUTF();
        //}
            System.out.println(somestring);


            //Thread.sleep(5000);                                   //Read file

            String filepath= "C:\\Users\\mahno\\Desktop\\BlankFile.txt";
            FileInputStream fr=new FileInputStream(filepath);           /* include your file name which you want to move*/

            byte b[]=new byte[2002];
            fr.read(b, 0, b.length);
                            //to show on console

            String result ="";
            for(int i=0; i<2002 && b[i]!=0; i++){
                result +=(char) b[i];
            }
            System.out.println(result);
            OutputStream os=socket.getOutputStream();
            //DataOutputStream dos= new DataOutputStream(os);
            //dos.writeUTF(result);
            BufferedWriter writer= new BufferedWriter(new OutputStreamWriter(os));
            writer.write(result);
            os.close();
            writer.close();

            //close the socket  
            dis.readUTF(); 


            fr.close();
            is.close();
            dis.close();



        }

    }catch (IOException e){
        e.printStackTrace();
    }   

}

}

客户端 .

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

public class SendImageClient {


    public static void main(String args[]) throws Exception  {
        Socket socket=null;
        String resultfromServer="";
        OutputStream outputStream;
        InputStream inputstream;
        DataOutputStream dos;
        DataInputStream dis;
        try {
            socket = new Socket("192.168.10.33", 9998);
            outputStream = socket.getOutputStream();
                dos = new DataOutputStream(outputStream);
                inputstream = socket.getInputStream();  
                //dis = new DataInputStream(inputstream);
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));
            try {

                dos.writeInt(9);
                dos.writeUTF("Some data is being sent\n"); 
                outputStream.flush();
                dos.flush();



                   //Thread.sleep(10000);

                while((resultfromServer = reader.readLine())=null){

                } //read and put it in a string
                dos.writeUTF("\nOK");
                System.out.println(resultfromServer);




               //System.out.println(resultfromServer);


            } catch (Exception e) {
                e.printStackTrace();

            } finally {

                inputstream.close();
                //dis.close();
                reader.close();
                outputStream.close();
                dos.close();


            }


        }   catch(Exception e){

        }
                socket.close();

    }





}

双方都抛出异常 . 客户端异常:

java.net.SocketException: Software caused connection abort: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at java.io.DataOutputStream.write(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at java.io.DataOutputStream.writeUTF(Unknown Source)
at SendImageClient.main(SendImageClient.java:36)

服务器端异常:

java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at sun.nio.cs.StreamEncoder.writeBytes(Unknown Source)
at sun.nio.cs.StreamEncoder.implClose(Unknown Source)
at sun.nio.cs.StreamEncoder.close(Unknown Source)
at java.io.OutputStreamWriter.close(Unknown Source)
at java.io.BufferedWriter.close(Unknown Source)
at myServerTry.main(myServerTry.java:58)

服务器端将一直工作,直到它必须从客户端读取内容 .