如何使用NetworksApi.TCP.SERVER将文件发送到C#中连接到服务器的所有客户端

时间:2014-08-29 08:15:27

标签: c# .net tcp

这是SERVER代码 我想建立一个在线考试系统,它会将question.txt和规则.txt发送给连接到服务器的所有客户端。我不知道如何发送文件..我想从本地驱动器浏览文件然后将文件发送给所有客户请帮帮我

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using NetworksApi.TCP.SERVER;

namespace server
{

    public delegate void show_status(string soneya);
    public partial class Form1 : Form
    {

        Server examserver;
        string  star_time;
        string finish_time;

        public Form1()
        {
            InitializeComponent();
        }

        private void Form1_Load(object sender, EventArgs e)
        {

        }


        private void ChangeText(string soneya)
        {

            if (textBox3.InvokeRequired)
            {

                Invoke(new show_status(ChangeText), new object[] { soneya });

            }

            else
            {
                textBox3.Text += soneya + "\r\n";
            }
        }


        private void textBox1_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox2_TextChanged(object sender, EventArgs e)
        {

        }

        private void button1_Click(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && textBox2.Text != " ")
            {
                examserver = new Server(textBox1.Text, textBox2.Text);

                examserver.OnClientConnected += new OnConnectedDelegate(examserver_OnClientConnected);

                examserver.OnClientDisconnected += new OnDisconnectedDelegate(examserver_OnClientDisconnected);
                examserver.OnDataReceived += new OnReceivedDelegate(examserver_OnDataReceived);
                examserver.OnServerError += new OnErrorDelegate(examserver_OnServerError);
                examserver.Start();
                ChangeText("server is Running");

            }
        }

        void examserver_OnServerError(object Sender, ErrorArguments R)
        {
            //ChangeText("server is not Running");

        }

        void examserver_OnDataReceived(object Sender, ReceivedArguments R)
        {
            throw new NotImplementedException();
        }

        void examserver_OnClientDisconnected(object Sender, DisconnectedArguments R)
        {
            ChangeText("disconnected "+ R.Name );

        }
        void examserver_OnClientConnected(object Sender, ConnectedArguments R)
        {
            ChangeText("accepted request from"+R.Name );

        }

        private void textBox3_TextChanged(object sender, EventArgs e)
        {

        }

        private void button2_Click(object sender, EventArgs e)
        {
            star_time = textBox4.Text;
            finish_time = textBox5.Text;
            ChangeText("Exam will be Start from" + textBox4.Text);
            ChangeText("Exam will be finish at " + textBox5.Text);

        }

        private void textBox4_TextChanged(object sender, EventArgs e)
        {

        }

        private void textBox5_TextChanged(object sender, EventArgs e)
        {

        }
    }
}

1 个答案:

答案 0 :(得分:0)

我认为NetworksAPI库不包含“发送”/“Broacast”文件的方法。 (给一个用户或每个人)。 虽然我相信每个客户端(也可以作为服务器)和服务器也可以作为客户端工作。

无论哪种方式,我从未测试过,因为在我的应用程序中,我只需将客户端连接到服务器,并与之通信。

我注意到你也从视频教程中获得了代码。 我对我的应用程序进行了一些修改,包括添加一个将文件发送到服务器的方法。 (该教程中未包含该内容)

我可能无法帮助您100%发送文件“广播”(向所有人发送文件),但我可以帮助您(或任何需要这样做的人)获取发送文件的解决方案(或文件)从客户端到服务器。

检查我的教程Bellow(尽可能选择您的代码/ Internet上的标准教程):

“如何使用NetworksAPI将文件从客户端发送到服务器”

[在客户端]

1)创建一个字符串:

string fileName;

2)创建一个获取/设置方法:

public string FileName { get { return fileName; } set { fileName = value; } }

3)按钮“Send_File_Click”(说明):

a)配置OpenFile对话框

b)然后加载OpenFileDialog

c)将您在上面创建的字符串设置为OpenFileDialog Selected File

Code Bellow:

    private void button_SendFile_Click(object sender, EventArgs e)
    {
        try
        {
            ofd = new OpenFileDialog();
            ofd.CheckFileExists = true;
            ofd.CheckPathExists = true;
            ofd.Multiselect = false;
            ofd.RestoreDirectory = true;

            if (ofd.ShowDialog() == DialogResult.OK)
            {
                fileName = ofd.FileName;
                textbox_FileName.Text = FileName;
                c.SendFile(fileName);
            }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
    }

如果您愿意,可以将转移百分比添加到“状态”文本框。

注意:我相信在教程(视频)中你得到了CodeBox TextBox

被调用:txt_Chat或txt_Message。

Code Bellow:

void c_OnClientFileSending(object Sender, ClientFileSendingArguments R)
{
     try
     {
    /* 
    Set Text stands for the method: "updateText" or "changeText" as referenced in that Tutorial you've seen.
    Included a `String.Format` to Properly Display Percentage.
    */          
     string percentage = String.Format("Transfering: {0}%", R.TransferPercentage); SetText(percentage);
     }
     catch (Exception ex) { MessageBox.Show(ex.Message); }
     }

[在服务器上]

1)在"Form1_Load()"方法内,您必须设置服务器(已接收)文件路径。

示例:

private void Form1_Load(object sender, EventArgs e)
{
    server.FilesPath = @"C:\";
}

那都是M8!

请注意,没有任何消息(在我的代码中)将指示文件是否存在 收到与否。

如果你像我上面提到的那样设置"textbox_Status",你会注意到它 将在文件发送后显示:“100%”。

转移完成后,只需检查(服务器)收到的文件夹。

在这种情况下,它将位于C:\

该文件将在那里。

最诚挚的问候;