C# 如何使服务器从多个客户端套接字接收图片
这是我从客户端接收图片的服务器代码C# 如何使服务器从多个客户端套接字接收图片,c#,sockets,client-server,client,C#,Sockets,Client Server,Client,这是我从客户端接收图片的服务器代码 public void Hey() { Functions.ServerSend("Picture"); if (Functions.serverrecievetext().CompareTo("Okay") == 0) { sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); LingerO
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#中,我知道线程基础知识。我如何在按钮上为每个客户端创建线程?单击哪个按钮启动服务器?问题是,当我启动新服务器时,服务器开始从两个客户端接收线程,而不仅仅是一个客户端。我不明白您想要什么,或者问题是什么?但您的服务器代码当然需要多线程才能处理多个客户机,因为连接是TCP,而您的代码目前没有实现这一点。同时从两个或多个客户端接收数据不会有问题,只是每个线程将独立处理每个连接。你说,你想有多个服务器接收,这是不可能的同一个端口。我们不能在同一端口上运行多台服务器。