winform客户端与服务端之间发送消息和文件,文件可批量上传,客户端需要连接服务端的IP地址即可通信和发文件;具体代码实现过程
时间: 2023-11-11 16:05:01 浏览: 43
以下是使用C#编写的一个简单示例,展示了如何在WinForms客户端和服务端之间发送消息和文件。
首先,创建一个WinForms应用程序,包含两个窗体:`ClientForm`和`ServerForm`。
在`ClientForm`中,添加以下控件:一个`TextBox`用于输入消息,一个`Button`用于发送消息,一个`Button`用于选择文件,一个`Button`用于批量上传文件。
```csharp
using System;
using System.IO;
using System.Net.Sockets;
using System.Windows.Forms;
namespace Client
{
public partial class ClientForm : Form
{
private TcpClient client;
public ClientForm()
{
InitializeComponent();
}
private void ConnectToServer(string serverIP)
{
try
{
client = new TcpClient();
client.Connect(serverIP, 8888);
MessageBox.Show("Connected to the server!");
}
catch (Exception ex)
{
MessageBox.Show("Error connecting to the server: " + ex.Message);
}
}
private void SendMessage(string message)
{
try
{
StreamWriter writer = new StreamWriter(client.GetStream());
writer.WriteLine(message);
writer.Flush();
MessageBox.Show("Message sent!");
}
catch (Exception ex)
{
MessageBox.Show("Error sending message: " + ex.Message);
}
}
private void SendFile(string filePath)
{
try
{
FileStream fileStream = new FileStream(filePath, FileMode.Open);
byte[] buffer = new byte[client.ReceiveBufferSize];
int bytesRead;
NetworkStream networkStream = client.GetStream();
while ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0)
{
networkStream.Write(buffer, 0, bytesRead);
}
fileStream.Close();
MessageBox.Show("File sent!");
}
catch (Exception ex)
{
MessageBox.Show("Error sending file: " + ex.Message);
}
}
private void btnConnect_Click(object sender, EventArgs e)
{
string serverIP = txtServerIP.Text;
ConnectToServer(serverIP);
}
private void btnSend_Click(object sender, EventArgs e)
{
string message = txtMessage.Text;
SendMessage(message);
}
private void btnSelectFile_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
txtFilePath.Text = openFileDialog.FileName;
}
}
private void btnSendFile_Click(object sender, EventArgs e)
{
string filePath = txtFilePath.Text;
SendFile(filePath);
}
}
}
```
在`ServerForm`中,添加以下控件:一个`TextBox`用于显示接收到的消息,一个`Button`用于启动服务器。
```csharp
using System;
using System.IO;
using System.Net;
using System.Net.Sockets;
using System.Threading;
using System.Windows.Forms;
namespace Server
{
public partial class ServerForm : Form
{
private TcpListener server;
private Thread listenThread;
public ServerForm()
{
InitializeComponent();
}
private void StartServer()
{
try
{
server = new TcpListener(IPAddress.Any, 8888);
server.Start();
MessageBox.Show("Server started!");
while (true)
{
TcpClient client = server.AcceptTcpClient();
Thread clientThread = new Thread(HandleClient);
clientThread.Start(client);
}
}
catch (Exception ex)
{
MessageBox.Show("Error starting the server: " + ex.Message);
}
}
private void HandleClient(object clientObj)
{
TcpClient client = (TcpClient)clientObj;
try
{
StreamReader reader = new StreamReader(client.GetStream());
string message = reader.ReadLine();
Invoke((MethodInvoker)delegate
{
txtReceivedMessage.Text = message;
});
}
catch (Exception ex)
{
MessageBox.Show("Error handling client: " + ex.Message);
}
finally
{
client.Close();
}
}
private void btnStart_Click(object sender, EventArgs e)
{
listenThread = new Thread(StartServer);
listenThread.Start();
}
}
}
```
以上是一个简单的示例,演示了如何在WinForms客户端和服务端之间发送消息和文件。当客户端连接到服务端时,客户端可以输入消息并发送,也可以选择文件并发送。服务端接收到消息后,在界面上显示接收到的消息。
请注意,这只是一个基本示例,可能需要根据您的实际需求进行修改和扩展。例如,您可能需要添加错误处理、进度条、文件上传进度等功能。
希望以上代码能对您有所帮助!如果您有其他问题,请随时提问。