Я пытаюсь загрузить видео, записанное через Android-телефон. но при отправке видео в качестве байт [] к серверу я получаю ниже ошибки:java.net.SocketException: sendto failed: EPIPE (Broken pipe) при отправке байта []
01-20 13:03:18.250: E/SaveMedia-response(4393): java.net.SocketException: sendto failed: EPIPE (Broken pipe)
Вот как я пытаюсь загрузить видео:
SoapObject request = new SoapObject(
HelpMeConstant.WSDL_TARGET_NAMESPACE, "SaveMedia");
Log.i("SaveMedia-parameter", "Email : " + Email + ", Media : " + Media
+ "MediaType : " + MediaType + ",MediaExt : " + MediaExt);
MediaAvidance mediainfo = new MediaAvidance();
mediainfo.EmailId = Email;
mediainfo.Media = Media;
mediainfo.MediaExt = MediaExt;
mediainfo.MediaType = MediaType;
PropertyInfo pi = new PropertyInfo();
pi.setName("mediainfo");
pi.setValue(mediainfo);
pi.setType(mediainfo.getClass());
request.addProperty(pi);
/* request.addProperty("EmailId",Email);
request.addProperty("Media", Media);
request.addProperty("MediaType", MediaType);
request.addProperty("MediaExtn", MediaExt);
*/
SoapSerializationEnvelope envelope = new SoapSerializationEnvelope(
SoapEnvelope.VER11);
Log.i("SaveMedia","Serialising..");
new MarshalBase64().register(envelope);
envelope.dotNet = true;
envelope.setOutputSoapObject(request);
HttpTransportSE httpTransport = new HttpTransportSE(
HelpMeConstant.SOAP_ADDRESS);
Object response = null;
try {
Log.i("SaveMedia","Calling service..");
httpTransport.call(HelpMeConstant.SOAP_ACTION + "SaveMedia",
envelope);
Log.i("SaveMedia","getting response..");
response = envelope.getResponse();
} catch (Exception exception) {
response = exception.toString();
}
Log.i("response", response.toString());
return response.toString();
и отправляет на веб-службы .net который, как показано ниже:
[WebMethod]
public string SaveMedia(MediaAvidance avidanceinfo)
{
rs = new ResultSet();
rs = logictask.SaveMedia(avidanceinfo.EmailId,avidanceinfo.Media,avidanceinfo.MediaType,avidanceinfo.MediaExt);
return rs.isSuccessfull;
}
MediaAvidance:
public class MediaAvidance implements KvmSerializable {
public String EmailId;
public byte[] Media;
public String MediaType;
public String MediaExt;
public MediaAvidance() {
}
public MediaAvidance(String EmailID, byte[] Media, String MediaType,
String MediaExt) {
this.EmailId = EmailID;
this.Media = Media;
this.MediaType = MediaType;
this.MediaExt = MediaExt;
}
@Override
public Object getProperty(int arg0) {
switch (arg0) {
case GETEMAILID:
return EmailId;
case GETMEDIA:
return Media;
case GETMEDIATYPE:
return MediaType;
case GETMEDIAEXT:
return MediaExt;
default:
return null;
}
}
@Override
public int getPropertyCount() {
// TODO Auto-generated method stub
return 4;
}
@SuppressWarnings("rawtypes")
@Override
public void getPropertyInfo(int index, Hashtable arg1, PropertyInfo info) {
switch (index) {
case 0:
info.type = PropertyInfo.STRING_CLASS;
info.name = "EmailId";
break;
case 1:
info.type = PropertyInfo.OBJECT_CLASS;
info.name = "Media";
break;
case 2:
info.type = PropertyInfo.STRING_CLASS;
info.name = "MediaType";
break;
case 3:
info.type = PropertyInfo.STRING_CLASS;
info.name = "MediaExt";
break;
default:
break;
}
}
@Override
public void setProperty(int index, Object value) {
switch (index) {
case 0:
EmailId = value.toString();
break;
case 1:
Media = (byte[]) value;
break;
case 2:
MediaType = value.toString();
break;
case 3:
MediaExt = value.toString();
break;
default:
break;
}
}
}
На стороне сервера MediaAvidance класс donot реализует KvmSerializable
и его метод.
Я искал несколько дней и прошел через много вопросов в stackoverflow & понял, что я пытаюсь писать, когда соединение закрыто, а также что это связано с программированием сокетов. BUT
Я не знаю, как поддерживать связь (возможно, решение, я думаю). Пожалуйста, помогите мне.
Спасибо, Sourabh
Вы можете предоставить больше строк с вашей трассировки ошибок сервера здесь. И вы можете здесь вставить класс MediaAvidance. – kingAm
Добавлен код класса MediaAvidance. У меня нет следов стека в исключении. это все, что у меня есть как исключение. –
В вашем коде клиента вы принимаете это видео в виде массива байтов, а затем передаете его в свой запрос на мыло. Скорее всего, из-за большого размера массива байтов, ваше соединение с сервером или клиентом закрывается до завершения загрузки. Можете сохранить это соединение в течение нескольких минут, когда ваш файл будет загружен. Вы можете его искать. Возможно, вы не решите свою проблему, выполнив ее только на стороне клиента. Если у вас есть контроль над сервером, тогда для теста сначала попробуйте загрузить изображение с несколькими байтами, если оно будет успешно загружено, тогда мы сможем подтвердить вашу точную проблему здесь , – kingAm