我試圖從一個星期,從客戶端電腦截圖,併發送到服務器的Bij網絡。c#在插槽發送截圖
現在它有點工作了,但並不完全。我嘗試了幾個我在互聯網上找到的腳本,但沒有一個能夠像我想要的那樣工作,所以我改變了它們,但是對於socket的一些瞭解我無法正確理解。你們能幫我嗎?
截圖功能正常工作,但是當我發送流到我的服務器時,它只接收圖像的頂部(例如:原始屏幕截圖爲150kb,但我收到的文件只有40kb)嘗試其他幾個文件發送腳本,但最多我只收到6個字節。
當我嘗試使用While函數時,它沒有發送任何東西或1kb,所以我知道我做錯了什麼,但是什麼?
這裏是我的服務器代碼:
private void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
try
{
IPEndPoint ipEnd = new IPEndPoint(IPAddress.Any, 5656);
Socket sock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
sock.Bind(ipEnd);
sock.Listen(100);
Socket clientSock = sock.Accept();
byte[] clientData = new byte[1024 * 5000];
string receivedPath = "C:/";
int receivedBytesLen = clientSock.Receive(clientData);
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.ASCII.GetString(clientData, 4, fileNameLen);
konjo = "Client: " + clientSock.RemoteEndPoint + "connected & File: " + fileName + " started received.";
BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Append)); ;
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
status = "File: " + fileName + "Received & Saved at path: " + receivedPath;
bWrite.Close();
clientSock.Close();
}
catch (Exception ex)
{
status = "Failed: " + ex.Message;
}
}
private void bgWorker_Complete(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = status;
}
這裏是我的客戶端代碼:
private void bgsender_work(object sender, DoWorkEventArgs e)
{
try
{
int screenWidth = Screen.GetBounds(new Point(0, 0)).Width;
int screenHeight = Screen.GetBounds(new Point(0, 0)).Height;
Bitmap bmpScreenShot = new Bitmap(screenWidth, screenHeight);
Graphics gfx = Graphics.FromImage((Image)bmpScreenShot);
gfx.CopyFromScreen(0, 0, 0, 0, new Size(screenWidth, screenHeight));
MemoryStream test = new MemoryStream();
bmpScreenShot.Save(test, ImageFormat.Jpeg);
bmpScreenShot.Save("C:\\Clienttest.jpeg", ImageFormat.Jpeg);
IPAddress[] ipAddress = Dns.GetHostAddresses(Dns.GetHostName());
IPEndPoint ipEnd = new IPEndPoint(ipAddress[2], 5656);
Socket clientSock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
string fileName = "screenshot.Jpeg";
string filePath = "Your File Path";
byte[] fileNameByte = Encoding.ASCII.GetBytes(fileName);
byte[] Data = test.ToArray();
byte[] clientData = new byte[4 + fileNameByte.Length + Data.Length];
byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
fileNameLen.CopyTo(clientData, 0);
fileNameByte.CopyTo(clientData, 4);
Data.CopyTo(clientData, 4 + fileNameByte.Length);
clientSock.Connect("192.168.1.15", 5656);
clientSock.Send(clientData);
status = "File: " + fileName + " has been sent.";
clientSock.Close();
Console.ReadLine();
}
catch (Exception ex)
{
status = "It failed: " + ex.Message;
}
}
private void bgsender_complete(object sender, RunWorkerCompletedEventArgs e)
{
label1.Text = status;
}
thx這對我有幫助! – Ceesjan