| |||||||
Das Thema "Bild an VB-Server schicken" befindet sich unter Android App Entwicklung auf Android-Hilfe.de.
|
| | Themen-Optionen | Ansicht |
| | #1 (permalink) |
| Neuer Benutzer Modell: Sony Ericsson Xperia X10 Registriert seit: 13.05.2010
Beiträge: 14
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
| also ich habe ein Problem das ich kein Bild(2MB) an den Server schicken kann. Strings usw. kann ich problemlos senden, da diese ja sehr kleine bytes sind. Mein Lösungsweg wäre das Bild in 1024 Byte-Packete zu schicken, aber irgendwie funktioniert das nicht ganz. Vielleicht könnt ihr mir helfen ![]() mfg Narox Meine SendMethode: Code: public void sendData(byte[] data){
Socket socket = null;
DataOutputStream out = null;
DataInputStream in = null;
try {
socket = new Socket("192.168.20.105", 8888);
if(socket.isConnected()){
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
ArrayList<Byte> imgdata=new ArrayList<Byte>();
//Die Daten in eine ArrayList speichern,weil diese dynamsich ist
for(int i=0;i<data.length;i++){
imgdata.add(data[i]);
}
//Die Pakete aufteilen
int nOfPackets=imgdata.size()/1024;
if(imgdata.size()%1024!=0){
nOfPackets++;
}
//Die Pakete senden
byte[] buffer;
for(int i=0;i<nOfPackets;i++){
//Falls die anzahl der bytes kleine ist als die Paketgröße dann, die Paketgröße anpassen
if(imgdata.size()>1024){
buffer=new byte[1024];
}else{
buffer=new byte[imgdata.size()];
}
//Die bytes in den buffer schreiben
for(int pos=0;pos<1024;pos++){
buffer[pos]=imgdata.get(0);
imgdata.remove(0);
}
//an den Server schicken
out.write(buffer, 0, buffer.length);
}
/*userdata=in.readLine();
if(userdata.equals("FAILED")){
showToast("Identification failed!");
}else{
Intent pinIntent = new Intent(this, PinSend.class);
pinIntent.putExtra("userdata", userdata);
pinIntent.putExtra("amount", getIntent().getExtras().getString("amount"));
startActivity(pinIntent);
}*/
}
} catch (UnknownHostException e) {
showToast("Sending failed!");
e.printStackTrace();
} catch (IOException e) {
showToast("Sending failed!");
e.printStackTrace();
}
finally{
try {
if(socket!=null){
socket.close();
}
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
} Code: Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Imports System.Drawing
Imports System.Text
Module Module1
Private listener As TcpListener
Private client As New TcpClient
Private clients As New List(Of NetworkStream)
Sub Main()
Try
listener = New TcpListener(IPAddress.Any, 8888)
listener.Start()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.WriteLine("Server gestartet")
While True
client = listener.AcceptTcpClient()
If (client.Connected) Then
Dim stream As NetworkStream = client.GetStream()
Console.WriteLine("Client angemeldet")
Dim t As New Threading.Thread(AddressOf ClientListener)
t.Start(stream)
End If
End While
End Sub
Private Sub ClientListener(ByVal stream As NetworkStream)
Try
Dim recData(1024) As Byte
Dim recBytes As Integer
Dim totalrecbytes As Integer = 0
Dim memStream As MemoryStream = New MemoryStream()
While ((recBytes = stream.Read(recData, 0, recData.Length)) > 0)
memStream.Write(recData, 0, recData.Length)
totalrecbytes += recBytes
End While
Dim bitImage As Bitmap = New Bitmap(System.Drawing.Image.FromStream(memStream))
bitImage.Save("C:\test.bmp")
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("OK")
'stream.Write(sendBytes, 0, sendBytes.Length)
Catch ex As Exception
Finally
stream.Close()
client.Close()
clients.Remove(stream)
End Try
End Sub
End Module Geändert von narox (07.12.2011 um 19:21 Uhr) |
| | |
| | #2 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Desire HD Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
|
Was genau passiert denn wenn du das ausführst? Mein Tip: Statt List<Byte> könnten man auch ByteArrayInputStream verwenden ![]() PHP-Code:
__________________ Tutorials: - Getting Started with the Android NDK(en) - Zuverlässigkeit und Flußkontrolle bei der Datenübertragung in Multiplayer Games (de) - ExpandableListView mit X Leveln(de) |
| | |
| | #3 (permalink) |
| Neuer Benutzer Modell: Sony Ericsson Xperia X10 Registriert seit: 13.05.2010
Beiträge: 14
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
|
habs gestan noch getestet und bin drauf gekommen das die laufzeit durch die arraylist extrem verlängert worden ist, ich werde es mal mit deiner methode probiern und schau was dabei herauskommt ![]() danke für die antwort mfg. |
| | |
| | #4 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Desire HD Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
|
Könnte sein das die Abbruchbedingung noch anders auszusehen hat, wie gesagt, habs nicht getestet.
__________________ Tutorials: - Getting Started with the Android NDK(en) - Zuverlässigkeit und Flußkontrolle bei der Datenübertragung in Multiplayer Games (de) - ExpandableListView mit X Leveln(de) |
| | |
| | #5 (permalink) |
| Neuer Benutzer Modell: Sony Ericsson Xperia X10 Registriert seit: 13.05.2010
Beiträge: 14
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
|
ich glaube es gibt auch ein problem beim server. der geht erst gar nicht in die while-schleife hinein -.- hättest du da eine idee wie man es anders lösen könnte??
|
| | |
| | #6 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Desire HD Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
|
Ich find VB nicht unbedingt die passendste Sprache um nen Server zu schreiben, da ein server meist sowieso keine GUI braucht. Ich würds in Java machen, weils einfach ist. ![]() Auf Anhieb seh ich keinen Fehler in deinem VB, aber ich bin auch nicht für VB zu haben.
__________________ Tutorials: - Getting Started with the Android NDK(en) - Zuverlässigkeit und Flußkontrolle bei der Datenübertragung in Multiplayer Games (de) - ExpandableListView mit X Leveln(de) |
| | |
| | #7 (permalink) |
| Neuer Benutzer Modell: Sony Ericsson Xperia X10 Registriert seit: 13.05.2010
Beiträge: 14
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
|
wär ich auch stark dafür und hätte es auch schon längst gemacht(da auch android in java ist), das problem ist hald, das ich eine bilderkennungssoftware habe und daraus kann nur vb-code, c#...usw. exportiert werden ^^ so habe den server ein bisschen geändert, es liegt wirklich noch an der bedingung werd mich ein bisschen spiele, danke für die hilfe |
| | |
| | #8 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Desire HD Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
|
np Das sollte klappen: PHP-Code:
__________________ Tutorials: - Getting Started with the Android NDK(en) - Zuverlässigkeit und Flußkontrolle bei der Datenübertragung in Multiplayer Games (de) - ExpandableListView mit X Leveln(de) Geändert von Unicate (08.12.2011 um 14:49 Uhr) |
| | |
| Folgender Benutzer bedankt sich bei Unicate für diesen Beitrag: | narox (08.12.2011) |
| | #9 (permalink) |
| Neuer Benutzer Modell: Sony Ericsson Xperia X10 Registriert seit: 13.05.2010
Beiträge: 14
Abgegebene Danke: 3
Erhielt 1 Danke für 1 Beitrag
|
habs zwar jetzt anders egschafft aber trotzdem danke ![]() Android: Code: public void sendData(byte[] data){
Socket socket = null;
DataOutputStream out = null;
DataInputStream in = null;
try {
socket = new Socket("192.168.20.105", 8888);
if(socket.isConnected()){
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
out.write(new Integer(data.length).toString().getBytes());
byte[] msgbuffer=new byte[1024];
in.read(msgbuffer, 0, msgbuffer.length);
servermsg=new String(msgbuffer).substring(0, 2);
Log.e("da", servermsg);
if(servermsg.equals("OK")){
byte[] buffer;
int pos = 0;
do {
if(pos+1024<data.length){
buffer=new byte[1024];
System.arraycopy(data, pos, buffer, 0, 1024);
out.write(buffer, 0, buffer.length);
pos+=1024;
}else{
buffer=new byte[data.length-pos];
System.arraycopy(data, pos, buffer, 0, data.length-pos);
out.write(buffer, 0, buffer.length);
pos=pos+(data.length-pos);
}
Log.e("position", new Integer(pos).toString());
} while (pos!=data.length);
}else{
}
}
} catch (UnknownHostException e) {
showToast("Sending failed!");
e.printStackTrace();
} catch (IOException e) {
showToast("Sending failed!");
e.printStackTrace();
}
finally{
try {
if(socket!=null){
socket.close();
}
if(out!=null){
out.close();
}
if(in!=null){
in.close();
}
}catch (IOException e) {
e.printStackTrace();
}
}
} Code: Imports System.Net.Sockets
Imports System.IO
Imports System.Net
Imports System.Drawing
Imports System.Text
Module Module1
Private listener As TcpListener
Private client As New TcpClient
Private clients As New List(Of NetworkStream)
Sub Main()
Try
listener = New TcpListener(IPAddress.Any, 8888)
listener.Start()
Catch ex As Exception
Console.WriteLine(ex.Message)
End Try
Console.WriteLine("Server gestartet")
While True
client = listener.AcceptTcpClient()
If (client.Connected) Then
Dim stream As NetworkStream = client.GetStream()
Console.WriteLine("Client angemeldet")
Dim t As New Threading.Thread(AddressOf ClientListener)
t.Start(stream)
End If
End While
End Sub
Private Sub ClientListener(ByVal stream As NetworkStream)
Try
Dim countbytes(client.ReceiveBufferSize) As Byte
stream.Read(countbytes, 0, CInt(client.ReceiveBufferSize))
Dim countStr As String = Encoding.UTF8.GetString(countbytes)
Console.WriteLine(countStr)
Dim count As Integer = Convert.ToInt32(countStr)
Dim sendBytes As [Byte]() = Encoding.ASCII.GetBytes("OK")
stream.Write(sendBytes, 0, sendBytes.Length)
Console.WriteLine(count)
Dim pos As Integer = 0
Dim data(count) As Byte
While (pos <> count)
If (pos + 1024 < count) Then
Dim buffer(1024) As Byte
stream.Read(buffer, 0, buffer.Length)
System.Array.Copy(buffer, 0, data, pos, buffer.Length)
pos += 1024
Else
Dim buffer(count - pos) As Byte
stream.Read(buffer, 0, buffer.Length)
System.Array.Copy(buffer, 0, data, pos, buffer.Length)
pos += (count - pos)
End If
End While
Console.WriteLine(pos)
Dim memStream As MemoryStream = New MemoryStream(data)
'Dim img As Image = Image.FromStream(memStream)
'img.Save("C:\test.jpg")
'stream.Write(sendBytes, 0, sendBytes.Length)
Catch ex As Exception
Console.WriteLine(ex.ToString)
Finally
stream.Close()
client.Close()
clients.Remove(stream)
End Try
End Sub
End Module |
| | |
| | #10 (permalink) |
| Fortgeschrittenes Mitglied Modell: HTC Desire HD Registriert seit: 09.08.2010
Beiträge: 345
Abgegebene Danke: 11
Erhielt 40 Danke für 38 Beiträge
|
Ich kann dir empfehlen die bytearrays wieder zu verwenden und sie nicht in jedem schleifendurchlauf neu zu erstellen. Das ist sehr viel schneller, da du jetzt den gc zu sehr beanspruchst und Gefahr läufst einen OutOfMemoryError zu erzeugen. Sent from my HTC Desire HD using Tapatalk
__________________ Tutorials: - Getting Started with the Android NDK(en) - Zuverlässigkeit und Flußkontrolle bei der Datenübertragung in Multiplayer Games (de) - ExpandableListView mit X Leveln(de) |
| | |
![]() |
|
| Themen-Optionen | |
| Ansicht | |
| |
| ||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| [Gelöst] Mit Kamera Bild machen, speichert aber nur eine schwarzes bild | Tomy91 | Motorola Defy Forum | 2 | 15.07.2011 19:11 |
| Bild per MMS verschicken -> Bild wird auf die Seite gedreht | Tiger-Chrisi | Samsung Galaxy S (I9000) Forum | 8 | 31.05.2011 11:19 |
| Facebook app und Freund Bild schicken? | Outlaw | Kommunikation | 0 | 15.02.2011 10:37 |
| ImageView Bild teilweise durch zweites bild überschreiben | missG | Android App Entwicklung | 0 | 25.10.2010 15:39 |
| Twonky Server Mobile (Streaming Server) | nodch | Sonstige Apps & Widgets | 5 | 03.02.2010 00:14 |