Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将图像从android java发送到pc上的c#服务器_Java_Android - Fatal编程技术网

将图像从android java发送到pc上的c#服务器

将图像从android java发送到pc上的c#服务器,java,android,Java,Android,我试图使用Socket将图像从android发送到C#server,但出现了一些问题 package com.example.clientsocket; import java.io.File; import java.io.FileInputStream; import java.io.InputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.OutputS

我试图使用Socket将图像从android发送到C#server,但出现了一些问题

package com.example.clientsocket;

import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.TextView;

public class MainActivity extends Activity {
TextView serverMessage;
Thread m_objThreadClient;
Socket clientSocket;
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        serverMessage=(TextView)findViewById(R.id.textView1);
    }
public void Start(View view)
{
    m_objThreadClient=new Thread(new Runnable() 
    {
          public void run()
           {
              try 
               {
                 clientSocket= new Socket("192.168.88.113",2001);
                 //ObjectOutputStream oos = new ObjectOutputStream(clientSocket.getOutputStream());



                 File myFile = new File("/storage/sdcard0/Pictures/CameraSample/*.jpg");
                 InputStream fis = new FileInputStream("/storage/sdcard0/Pictures/CameraSample/*.jpg");

                 byte [] buffer = new byte[(int)myFile.length()];
                 fis.read(buffer,0,buffer.length);


                OutputStream outputStream = clientSocket.getOutputStream();
                outputStream.write(buffer.length);
                outputStream.write(buffer,0,buffer.length);
                 outputStream.flush();
                 outputStream.close();
                 clientSocket.close();
                 //byte [] buffer = new byte[(int)myFile.length()];




              // ...
              //fis.read(buffer,0,buffer.length);
              //OutputStream os = clientSocket.getOutputStream();
              //oos.writeObject("37");
              //oos.flush();
              //oos.writeObject(buffer);
              //os.write(37);
              //os.write(buffer);
              // <- This one.
                /* 
                 int temp = 0 ;  
                 while((temp = fis.read(buffer)) != -1)
                 {  
                     outputStream.write(buffer, 0, temp);  
                 }  */




                 /*
                 Message serverMessage= Message.obtain();
                 ObjectInputStream ois =new ObjectInputStream(clientSocket.getInputStream());
                 String strMessage = (String)ois.readObject();
                serverMessage.obj=strMessage;
                mHandler.sendMessage(serverMessage); 
                oos.close();
                ois.close();*/
               } 
               catch (Exception e) 
               {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

             }
            });

     m_objThreadClient.start();

}
Handler mHandler = new Handler() {
    @Override
    public void handleMessage(Message msg) 
    {
        messageDisplay(msg.obj.toString());
    }
};
public void messageDisplay(String servermessage)
{
    serverMessage.setText(""+servermessage);
}

}
package com.example.clientsocket;
导入java.io.File;
导入java.io.FileInputStream;
导入java.io.InputStream;
导入java.io.ObjectInputStream;
导入java.io.ObjectOutputStream;
导入java.io.OutputStream;
导入java.net.Socket;
导入android.app.Activity;
导入android.os.Bundle;
导入android.os.Handler;
导入android.os.Message;
导入android.view.view;
导入android.widget.TextView;
公共类MainActivity扩展了活动{
TextView服务器消息;
线程m_objThreadClient;
插座客户端插座;
@凌驾
创建时的公共void(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
serverMessage=(TextView)findViewById(R.id.textView1);
}
公共无效开始(视图)
{
m_objThreadClient=新线程(new Runnable()
{
公开募捐
{
尝试
{
clientSocket=新套接字(“192.168.88.113”,2001年);
//ObjectOutputStream oos=新的ObjectOutputStream(clientSocket.getOutputStream());
File myFile=新文件(“/storage/sdcard0/Pictures/CameraSample/*.jpg”);
InputStream fis=新文件InputStream(“/storage/sdcard0/Pictures/CameraSample/*.jpg”);
byte[]buffer=新字节[(int)myFile.length()];
fis.read(缓冲区,0,缓冲区长度);
OutputStream OutputStream=clientSocket.getOutputStream();
outputStream.write(缓冲区长度);
outputStream.write(buffer,0,buffer.length);
outputStream.flush();
outputStream.close();
clientSocket.close();
//byte[]buffer=新字节[(int)myFile.length()];
// ...
//fis.read(缓冲区,0,缓冲区长度);
//OutputStream os=clientSocket.getOutputStream();
//oos.书面对象(“37”);
//oos.flush();
//oos.writeObject(缓冲区);
//os.write(37);
//写操作(缓冲区);

//此代码中有一个错误:

byte [] buffer = new byte[(int)myFile.length()];
fis.read(buffer,0,buffer.length);

OutputStream outputStream = clientSocket.getOutputStream();
outputStream.write(buffer.length); // You are changing the image here...
outputStream.write(buffer,0,buffer.length);
您在套接字上发送了错误的数据,如果图像太大,您可能会耗尽内存。此外,您正在将
myFile.length()
转换为int。文件长度太长是有原因的。它允许扫描非常大的文件。在您的情况下,它可能无法计量,但我建议不要这样做

应该是这样的:

byte [] buffer = new byte[1048];
OutputStream outputStream = clientSocket.getOutputStream();

int numberOfBytesBeenRead = fis.read(buffer,0,buffer.length);

while(numberOfBytesBeenRead != -1){
    outputStream.write(buffer,0,numberOfBytesBeenRead);
    numberOfBytesBeenRead = fis.read(buffer,0,buffer.length);
}    
这是我的示例C#客户端套接字将图像发送到Android服务器。在发送端,我首先发送图像大小,然后发送图像字节。希望对您有所帮助

客户

 try
        {

            //   IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.173.129");
            IPAddress[] ipAddress = Dns.GetHostAddresses("192.168.1.32");
            IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 4800);

           string file=@"C:\Users\test\Desktop\send image\test\abc.jpg
            {
                // Create Socket to send

                Socket senderSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                senderSocket.Connect(ipEnd);
                //send picture name



                // Connect the socket to the remote endpoint. Catch any errors.
                FileInfo FileInfo = new FileInfo(file);
                byte[] data = new byte[8];
                String fInfoStr = FileInfo.Length.ToString();
                while (fInfoStr.Length < 8)
                {
                    fInfoStr = "0" + fInfoStr;
                }
                byte[] countBuf = Encoding.ASCII.GetBytes(fInfoStr);

                byte[] fBuffer = new byte[FileInfo.Length];
                //FileStream
                FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
                //Read byte from image
                fs.Read(fBuffer, 0, fBuffer.Length);
                fs.Flush();
                fs.Close();

                senderSocket.Send(fBuffer, 0, fBuffer.Length, SocketFlags.None);
                senderSocket.Close();
                lblTestMsg.Visible = true;
                lblErrorMsg.Visible = false;
                lblTestMsg.Text = "File Sent Successfully"; 
            }

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);            
        }
                Socket socket = serverSocket.accept();
                InputStream iStream = socket.getInputStream();                 ;
                String currentDateandTime = sdf.format(new Date());



                //   int filenamelen =iStream.read();

                //image Name
                byte[] countBuf = new byte[8];
                //  byte[] imageNameByte = new byte[7];
                iStream.read(countBuf);
                //iStream.read(imageNameByte,0,7);
                readTxt = new String(countBuf);
                // imageName= new String(imageNameByte);
                int size = Integer.parseInt(readTxt);


                //Send byte array                                      
                 senderSocket.Send(countBuf, 0, data.Length, SocketFlags.None);new File(Environment.getExternalStorageDirectory() + File.separator + "DCIM" + File.separator + "SPARCS" + File.separator + folderName + File.separator + fileName).mkdirs();
                Log.e("TCP", "Create Drkt");
                //Create Image(File)

                new File(Environment.getExternalStorageDirectory() + File.separator + "DCIM" + File.separator + "SPARCS" + File.separator + folderName + File.separator + fileName, imageName + ".jpg").createNewFile();
                Log.e("TCP", "Create Img");

                try {
                    FileOutputStream fOutputStream = new FileOutputStream(Environment.getExternalStorageDirectory() + File.separator + "DCIM" + File.separator + "SPARCS" + File.separator + folderName + File.separator + fileName + File.separator + imageName + ".jpg");
                    BufferedOutputStream BufOutputStream = new BufferedOutputStream(fOutputStream);
                    byte[] aByte = new byte[size];
                    int byteRead;
                    //   int bytesRead = iStream.read(aByte);
                    //Read from server
                    while ((byteRead = iStream.read(aByte)) > 0) {
                        Log.e("TCP", "Save to file");//Write to file
                        BufOutputStream.write(aByte, 0, byteRead);
                    }
                    publishProgress();
                    notifyID++;
                    // String imageUri =Environment.getExternalStorageDirectory() + File.separator + "myDirectory" + File.separator + readTxt + File.separator+currentDateandTime+".jpg";
                    BufOutputStream.flush();
                    BufOutputStream.close();
                    socket.close();
                } catch (Exception ex) {
                    ex.printStackTrace();
                }
            }
        } catch (Exception e) {
            Log.e("TCP", "C: Error", e);
        }