winform获取本机IP,另一个填写我的IP,我发送消息和文件给另一台电脑,可接收消息和文件;具体实现过程以及代码
时间: 2024-04-12 13:30:50 浏览: 74
C# winform 获取 本机 IP
4星 · 用户满意度95%
以下是一个示例的 WinForms 应用程序,它可以获取本机的 IP 地址并允许你填写另一台电脑的 IP 地址,然后发送消息和文件给该电脑。这个示例使用了 TcpClient 来建立 TCP 连接并发送消息和文件。
首先,在你的 WinForms 应用程序的窗体上添加两个文本框(用于输入 IP 地址)和两个按钮(用于发送消息和文件)。命名为:`txtLocalIP`、`txtRemoteIP`、`btnSendMessage` 和 `btnSendFile`。
然后,在窗体的代码文件中添加以下代码:
```csharp
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Windows.Forms;
public partial class MainForm : Form
{
private TcpClient client;
public MainForm()
{
InitializeComponent();
txtLocalIP.Text = GetLocalIPAddress();
}
private void btnSendMessage_Click(object sender, EventArgs e)
{
try
{
string remoteIP = txtRemoteIP.Text;
string message = "Hello, this is a message from the local machine.";
client = new TcpClient(remoteIP, 8888);
NetworkStream stream = client.GetStream();
byte[] data = Encoding.ASCII.GetBytes(message);
stream.Write(data, 0, data.Length);
MessageBox.Show("Message sent successfully.");
stream.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private void btnSendFile_Click(object sender, EventArgs e)
{
try
{
string remoteIP = txtRemoteIP.Text;
string filePath = "C:\\path\\to\\file.txt";
client = new TcpClient(remoteIP, 8888);
NetworkStream stream = client.GetStream();
byte[] fileNameBytes = Encoding.ASCII.GetBytes(Path.GetFileName(filePath));
byte[] fileNameLengthBytes = BitConverter.GetBytes(fileNameBytes.Length);
byte[] fileData = File.ReadAllBytes(filePath);
stream.Write(fileNameLengthBytes, 0, fileNameLengthBytes.Length);
stream.Write(fileNameBytes, 0, fileNameBytes.Length);
stream.Write(fileData, 0, fileData.Length);
MessageBox.Show("File sent successfully.");
stream.Close();
client.Close();
}
catch (Exception ex)
{
MessageBox.Show("Error: " + ex.Message);
}
}
private string GetLocalIPAddress()
{
var host = Dns.GetHostEntry(Dns.GetHostName());
foreach (var ipAddress in host.AddressList)
{
if (ipAddress.AddressFamily == AddressFamily.InterNetwork)
{
return ipAddress.ToString();
}
}
return null;
}
}
```
在这个示例中,当点击 "发送消息" 按钮时,它会创建一个 `TcpClient` 对象,并连接到指定的远程 IP 地址和端口(这里端口使用的是 8888)。然后,它通过网络流发送消息,并在成功发送后显示一个消息框。
当点击 "发送文件" 按钮时,它会创建一个 `TcpClient` 对象,并连接到指定的远程 IP 地址和端口。然后,它将文件名和文件数据分别作为字节数组发送给远程主机,并在成功发送后显示一个消息框。
请注意,这只是一个简单的示例,仅供参考。在实际应用中,你需要根据具体需求进行更完善的错误处理、文件传输和网络连接管理等方面的实现。另外,你还需要确保远程主机上有一个能够接收消息和文件的应用程序。
阅读全文