C# 安卓应用发送IP地址到PC服务器并接收图片数据
使用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协议进行通信,您也可以使用其他协议进行通信。
- 使用本代码前请先确保您的设备已配置好必要的开发环境。
- 本代码仅供参考,请谨慎使用。
原文地址: https://www.cveoy.top/t/topic/qfeh 著作权归作者所有。请勿转载和采集!