[英]Why I can't view my UDP received Image in Android Studio?
我成功将string
从 Android Studio Java UDP客户端 发送到 Visual Studio C#UDP服务器 ,并将响应从服务器发送回客户端。
现在,我正在尝试从服务器发回Image
,而不是string
响应。 因此,在客户端按钮单击上,我应该从服务器取回图像。 没有语法错误,也没有怪异的行为。 只是什么也没有发生,而且我似乎看不到ImageView上收到的图像,而当我越过它时, final Bitmap ReceivedImage
为null
我需要转换为Bitmap
以外的其他东西吗? 这是正确的方法吗? 也许还有其他事情。有人可以帮助我指出我的错误吗? 谢谢
C#服务器:
class UdpServer
{
static void Main(string[] args)
{
byte[] dataReceived = new byte[1024];
UdpClient serverSocket = new UdpClient(15000);
string path = "C:\\Users\\kkhalaf\\Desktop\\Capture.PNG"; // image path
FileStream fs = new FileStream(path, FileMode.Open, FileAccess.Read); // prepare
BinaryReader br = new BinaryReader(fs); // prepare
byte[] dataToSend = br.ReadBytes(Convert.ToInt16(fs.Length)); //Convert image to byte[]
int i = 0;
while (true) // this while for keeping the server "listening"
{
Console.WriteLine("Waiting for a UDP client..."); // display stuff
IPEndPoint sender = new IPEndPoint(IPAddress.Any, 0); // prepare
dataReceived = serverSocket.Receive(ref sender); // receive packet
string stringData = Encoding.ASCII.GetString(dataReceived, 0, dataReceived.Length); // get string from packet
Console.WriteLine("Response from " + sender.Address); // display stuff
Console.WriteLine("Message " + i++ + ": " + stringData + "\n"); // display client's string
// Here I am sending back
serverSocket.Send(dataToSend, 8, sender);
}
}
}
Java客户端:在按钮上单击,此函数被调用以发送-接收-显示
public void SendUdpMsg(final String msg)
{
Thread networkThread = new Thread() {
// No local Host 127.0.0.1 in Android
String host = "192.168.200.3"; // Server's IP
int port = 15000;
DatagramSocket dsocket = null;
public void run() {
try {
// Get the Internet address of the specified host
InetAddress address = InetAddress.getByName(host);
// wrap a packet
DatagramPacket packetToSend = new DatagramPacket(
msg.getBytes(),
msg.length(),
address, port);
// Create a datagram socket, send the packet through it.
dsocket = new DatagramSocket();
dsocket.send(packetToSend);
// Here, I am receiving the response
byte[] buffer = new byte[1024]; // prepare
DatagramPacket packetReceived = new DatagramPacket(buffer, buffer.length); // prepare
dsocket.receive(packetReceived); // receive packet
byte[] buff = packetReceived.getData(); // convert packet to byte[]
final Bitmap ReceivedImage = BitmapFactory.decodeByteArray(buff, 0, buff.length); // convert byte[] to image
runOnUiThread(new Runnable() {
@Override
public void run() {
// this is executed on the main (UI) thread
final ImageView imageView = (ImageView) findViewById(R.id.imageView);
imageView.setImageBitmap(ReceivedImage);
}
});
dsocket.close();
} catch (Exception e) {
e.printStackTrace();
}//catch
}//run
};// Networkthread
networkThread.start();//networkThread.start()
}
答案不多,但由于我无法评论yolo
您应该使用TCP,它要好得多。 使用UDP,当它为400字节时,我什至会丢失数据。
有可能
serverSocket.Send(dataToSend, 8, sender);
更改为
serverSocket.Send(dataToSend, dataToSend.Length, sender);
另外,尝试首先将图像的长度(dataToSend.Length)发送给客户端,然后让客户端使用您发送的图像长度来创建字节数组。 有点像
byte[] buffer = new byte[recievedLengthOfImage]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.