使用C#实现安卓应用发送IP地址到PC服务器并接收图片数据

本示例代码演示如何使用C#在安卓应用中发送IP地址到PC服务器端,并接收PC端的图片数据并展示在安卓端。

安卓应用端代码(使用Xamarin.Android)

using Android.App;
using Android.OS;
using Android.Support.V7.App;
using Android.Widget;
using System;
using System.Net;
using System.Net.Sockets;
using System.Text;

namespace AndroidApp
{
    [Activity(Label = '@string/app_name', Theme = '@style/AppTheme', MainLauncher = true)]
    public class MainActivity : AppCompatActivity
    {
        private Button sendButton;
        private TextView ipTextView;
        private ImageView imageView;

        protected override void OnCreate(Bundle savedInstanceState)
        {
            base.OnCreate(savedInstanceState);
            SetContentView(Resource.Layout.activity_main);

            sendButton = FindViewById<Button>(Resource.Id.send_button);
            ipTextView = FindViewById<TextView>(Resource.Id.ip_textview);
            imageView = FindViewById<ImageView>(Resource.Id.imageview);

            // 获取本机IP地址
            var ipAddress = GetLocalIPAddress();
            ipTextView.Text = ipAddress;

            sendButton.Click += SendButton_Click;
        }

        private void SendButton_Click(object sender, EventArgs e)
        {
            // 获取PC服务器的IP地址
            var pcServerIp = '192.168.0.100';
            var pcServerPort = 8888;

            // 创建TCP客户端
            using (var client = new TcpClient())
            {
                // 连接到PC服务器
                client.Connect(pcServerIp, pcServerPort);

                // 发送本机IP地址到PC服务器
                var ipAddress = ipTextView.Text;
                var data = Encoding.UTF8.GetBytes(ipAddress);
                client.GetStream().Write(data, 0, data.Length);

                // 接收PC服务器发送的图片数据
                var imageData = new byte[1024];
                var memoryStream = new System.IO.MemoryStream();
                var bytesRead = 0;
                while ((bytesRead = client.GetStream().Read(imageData, 0, imageData.Length)) > 0)
                {
                    memoryStream.Write(imageData, 0, bytesRead);
                }

                // 将图片数据展示在ImageView上
                var bitmap = Android.Graphics.BitmapFactory.DecodeByteArray(memoryStream.ToArray(), 0, (int)memoryStream.Length);
                imageView.SetImageBitmap(bitmap);

                // 关闭连接
                client.Close();
            }
        }

        private string GetLocalIPAddress()
        {
            var addressList = Dns.GetHostEntry(Dns.GetHostName()).AddressList;
            foreach (var address in addressList)
            {
                if (address.AddressFamily == AddressFamily.InterNetwork)
                {
                    return address.ToString();
                }
            }
            return 'Unknown';
        }
    }
}

PC服务器端代码(使用WinForms)

using System;
using System.Drawing;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace PcServer
{
    public partial class Form1 : Form
    {
        private int port = 8888;
        private TcpListener listener;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {
            // 启动服务器
            StartServer();
        }

        private void StartServer()
        {
            // 创建TCP监听器
            listener = new TcpListener(IPAddress.Any, port);
            listener.Start();
            LogMessage($'服务器已启动,监听端口:{port}');

            // 启动接收客户端连接的循环
            Task.Run(async () =>
            {
                while (true)
                {
                    // 接受客户端连接
                    var client = await listener.AcceptTcpClientAsync();

                    // 处理客户端连接
                    Task.Run(() =>
                    {
                        HandleClient(client);
                    });
                }
            });
        }

        private void HandleClient(TcpClient client)
        {
            LogMessage($'接受来自客户端的连接:{client.Client.RemoteEndPoint}');

            // 读取客户端发送的IP地址
            var data = new byte[1024];
            var bytesRead = client.GetStream().Read(data, 0, data.Length);
            var ipAddress = Encoding.UTF8.GetString(data, 0, bytesRead);
            LogMessage($'接收到客户端的IP地址:{ipAddress}');

            // 加载并发送图片数据
            var imageBytes = File.ReadAllBytes('image.jpg');
            client.GetStream().Write(imageBytes, 0, imageBytes.Length);
            LogMessage('已发送图片数据');

            // 关闭连接
            client.Close();
        }

        private void LogMessage(string message)
        {
            Invoke(new Action(() =>
            {
                logTextBox.AppendText($'{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}{Environment.NewLine}');
                logTextBox.ScrollToCaret();
            }));
        }

        protected override void OnFormClosing(FormClosingEventArgs e)
        {
            base.OnFormClosing(e);

            // 关闭服务器
            listener.Stop();
        }
    }
}

注意:

  • 以上代码仅提供了一个简单的示例,并没有进行错误处理和异常处理。在实际应用中,您可能需要添加适当的错误处理和异常处理机制。
  • PC端的图片路径是固定的,您可以根据自己的需求修改。
  • 请确保安卓应用端和PC服务器端在同一个局域网内,并且PC服务器端的IP地址已正确设置。
  • 本示例使用TCP协议进行通信,您也可以使用其他协议进行通信。
  • 使用本代码前请先确保您的设备已配置好必要的开发环境。
  • 本代码仅供参考,请谨慎使用。
C# 安卓应用发送IP地址到PC服务器并接收图片数据

原文地址: https://www.cveoy.top/t/topic/qfeh 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录