使用 C# 中的套接字传输颜色
本文关键字:传输 颜色 套接字 使用 | 更新日期: 2023-09-27 18:35:14
我正在编写一个像DrawSomething这样的程序。但我不知道如何转移颜色画笔的归属。
我有一个绘制客户端和一个猜测客户端。当绘图客户端更改笔颜色时,如何通知猜测客户端并以新颜色绘制图表。
我想知道客户端或表格,了解如何使用套接字读取新颜色以及传输、字符串或 RGB 中的颜色类型?
我正在使用此代码。我认为它是字符串,然后我可以使用 ptp 协议进行传输,它将显示在客户端(猜测客户端)的另一端。
public Color _drawPenColor = Color.Red;
public int _drawPenWidth = 10;
ClientSendPtPPacket("DRAW-" + e.X.ToString() + "-" + e.Y.ToString() + "-"
+ _drawPenWidth.ToString() + "-"
+ _drawPenColor.ToString(),
opponentIP, opponentPort);
我收到了数据包,其中一个数据包是"Draw-150-234(位置)-10(宽度)-颜色[红色]"。
如果我使用调色板来更改颜色,它将是"绘制-150-234-10-颜色 [A=255, R=45, G=28, B=45]"。IP 和端口将被忽略。
所以我的问题是如何获得新的颜色。
PS:客户端发送PtPPacket类
private void ClientSendPtPPacket(string content, IPAddress toIp, int toPort)
{
try
{
if (_socketClient != null && _socketClient.Connected == true)
{
string sendPacket = _localIP.ToString() + "-" + _localPort.ToString() + "-" +
toIp.ToString() + "-" + toPort.ToString() + "-" + content;
Byte[] bytePacket = System.Text.Encoding.UTF8.GetBytes(sendPacket);
_socketClient.Send(bytePacket);
}
}
catch (Exception excep)
{
}
}
我自己解决了这个问题。我使用了 Agrb() 和 FromAgrb() 方法。
ToArgb() 用于显示颜色的数量,FromArgb() 用于获取颜色的数量。因此,我的猜测客户端会知道绘制客户端一直在使用的颜色,即使绘制客户端已更改其颜色。
但是我可以在字符串类型中使用ToAgrb()和FromArgb()。
我的例子是:
public Color ColorChange(string _color)
{
Color _newColor = new Color();
switch (_color)
{
case "Red": _newColor = Color.FromArgb(Color.Red.ToArgb()); break;
case "Orange": _newColor = Color.FromArgb(Color.Red.ToArgb()); break;
case "Yellow": _newColor = Color.FromArgb(Color.Yellow.ToArgb()); break;
case "GreenYellow": _newColor = Color.FromArgb(Color.GreenYellow.ToArgb()); break;
case "DeepSkyBlue": _newColor = Color.FromArgb(Color.DeepSkyBlue.ToArgb()); break;
case "DarkBlue": _newColor = Color.FromArgb(Color.DarkBlue.ToArgb()); break;
case "Purple": _newColor = Color.FromArgb(Color.Purple.ToArgb()); break;
case "Black": _newColor = Color.FromArgb(Color.Black.ToArgb()); break;
case "Gray": _newColor = Color.FromArgb(Color.Gray.ToArgb()); break;
case "White": _newColor = Color.FromArgb(Color.White.ToArgb()); break;
}
return _newColor;
}