C# 制作一个安卓应用点击按钮从安卓端发送安卓端ip地址到PC的服务器端winfrom的PC服务器端在接收到IP地址后通过按钮1把pc端的picturebox内容发送到安卓端展示
下面是一个简单的示例代码,演示如何使用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端的图片路径是固定的,您可以根据自己的需求修改
原文地址: https://www.cveoy.top/t/topic/ixXK 著作权归作者所有。请勿转载和采集!