【问题标题】:how can I make the server receive pictures from several clients sockets如何让服务器从多个客户端套接字接收图片
【发布时间】:2014-01-29 10:39:10
【问题描述】:

所以这是我从客户端接收图片的服务器代码

public void Hey()
{
    Functions.ServerSend("Picture");
    if (Functions.serverrecievetext().CompareTo("Okay") == 0)
    {
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        LingerOption lo = new LingerOption(false, 0);
        sck.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.Linger, lo);

        try
        {
            sck.Bind(Login.ip_ep);
            sck.Listen(100);
            Socket accepted = sck.Accept();
            byte[] buff = new byte[300000];

            MemoryStream m = new MemoryStream();

            read = accepted.Receive(buff, buff.Length, 0);
            m.Write(buff, 0, read);
            while (read > 0)
            {
                read = accepted.Receive(buff, buff.Length,0);
                if (read != 0)
                    m.Write(buff, 0, read);
            }

            Bitmap p = new Bitmap(m, false);
            m.Dispose();
            pictureBox1.Image = p;
            pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
            accepted.Close();

            sck.Dispose();
            sck.Close();
        }
        catch (Exception f)
        {

        }
    }
}



private void timer1_Tick(object sender, EventArgs e)
{
    Thread t = new Thread(Hey);
    t.Start();
}

它适用于一个客户,这里是客户代码:

private void timer1_Tick(object sender, EventArgs e)
{
    p = Functions.ClientRecieve();
    if (p.CompareTo("Picture") == 0)
    {
        Functions.ClientSendText("Okay");
        Bitmap b = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height);
        Graphics g = Graphics.FromImage(b as Image);
        g.CopyFromScreen(0, 0, 0, 0, b.Size);
        pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;
        pictureBox1.Image = b;
        sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        try
        {
            sck.Connect(Login.ip_ep);

            MemoryStream s = new MemoryStream();
            pictureBox1.Image.Save(s, System.Drawing.Imaging.ImageFormat.Png);

            sck.Send(s.ToArray());
            sck.Disconnect(true);
            sck.Dispose();
            sck.Close();
        }
        catch (Exception f)
        {

        }
    }
    else
    {
        Functions.ClientSendText("Okay");
        timer1.Stop();
        this.Close();
    }
}

我希望服务器能够同时接收来自不同客户端的不同图片(如果可能的话) 请注意,当我单击按钮时,我会打开一个新服务器,它也会给出启动新客户端的命令 所以当我点击按钮两次时,我想要两个服务器表单,每个表单都得到不同的图片 提前谢谢^^

【问题讨论】:

    标签: c# sockets client-server client


    【解决方案1】:

    您希望同时接收来自多个客户端的不同图片。然后你需要学习使用线程。接收服务器将侦听客户端并为每个客户端启动一个新线程,其中将编写接收图像的代码。像这样,您可以同时并行接收或发送数据。

    This 将帮助您开始使用 c# 中的线程

    【讨论】:

    • 我知道线程基础知识我怎样才能在按钮单击时为每个客户端创建一个线程来启动服务器问题是当我启动一个新服务器时服务器开始从两个客户端接收而不仅仅是一个
    • 我不明白你想要什么或问题是什么?但是您的服务器代码肯定需要多线程才能处理多个客户端,并且由于连接是 TCP 并且您的代码当前没有实现它。同时从两个或多个客户端接收不会有问题,只是每个线程将独立处理每个连接。你说,你想有多个服务器接收,这是不可能的同一个端口。我们不能在同一个端口上运行多个服务器。
    猜你喜欢
    • 1970-01-01
    • 2013-08-06
    • 1970-01-01
    • 2018-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-13
    • 2014-01-08
    相关资源
    最近更新 更多