public void UpLoadFile(object Cnt) { Socket client = Cnt as Socket; //获取文件名 不包含存储路径 string fullPath = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)); fullPath = FileSavePath + fullPath; FileInfo EzoneFile = new FileInfo(fullPath); //创建一个文件对象 FileStream EzoneStream = EzoneFile.OpenRead(); //打开文件流 int PacketSize = 1024 * 1024; //包的大小1M int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize)); //包的数量 //最后一个包的大小 int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount))); //发送[文件名]到服务器端 TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name)); //发送[包的大小]到服务器端 TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString())); //发送[包的总数量]到服务器端 TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString())); //发送[最后一个包的大小]到服务器端 TransferFiles.SendVarData(client, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString())); //bool IsTransferOk = false; byte[] data = new byte[PacketSize]; //数据包 for (int i = 0; i < PacketCount; i++) //开始循环发送数据包 { //从文件流读取数据并填充数据包 EzoneStream.Read(data, 0, data.Length); //发送数据包 if (TransferFiles.SendVarData(client, data) == 3) { //IsTransferOk = true; MessageBox.Show("文件传输出错!"); } } if (LastDataPacket != 0) //如果还有多余的数据包,则应该发送完毕! { data = new byte[LastDataPacket]; EzoneStream.Read(data, 0, data.Length); TransferFiles.SendVarData(client, data); } client.Close(); //关闭套接字 EzoneStream.Close(); //关闭文件流 connections--; this.SetText("\n" + "客户关闭连接:" + connections + "个连接数\n"); this.SetText("传输完成!\n"); }
public static void ServerActiveAsk() { IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(MonitorAddress.IP), MonitorAddress.Port); //指向远程服务端节点 Socket AskSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { AskSocket.Connect(ipep); //连接到Monitor } catch { Console.WriteLine("连接服务器出错!"); return;//能否直接跳出? } //获得客户端节点对象 IPEndPoint clientep = (IPEndPoint)AskSocket.RemoteEndPoint; //发送操作命令 TransferFiles.SendVarData(AskSocket, System.Text.Encoding.Unicode.GetBytes("Pulse")); AskSocket.Close(); }
public void ConnetMonitor() { IPEndPoint ipep = new IPEndPoint(IPAddress.Parse("192.168.3.32"), 30000); //指向远程服务端节点 Socket AskSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { AskSocket.Connect(ipep); //连接到Monitor } catch { SetText("\r\n连接服务器出错,请重启程序..."); AskSocket.Close(); return; } //获得客户端节点对象 IPEndPoint clientep = (IPEndPoint)AskSocket.RemoteEndPoint; //发送操作命令 TransferFiles.SendVarData(AskSocket, System.Text.Encoding.Unicode.GetBytes("ServerRegister")); AskSocket.Close(); }
public void BackupFile(object Cnt) { string ffname = Cnt as string; IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(MonitorAddress.IP), MonitorAddress.Port); //指向远程服务端节点 Socket askSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { askSocket.Connect(ipep); //连接到Monitor } catch { SetText("连接服务器出错!"); askSocket.Close(); return; } //获得客户端节点对象 IPEndPoint bakipep = (IPEndPoint)askSocket.RemoteEndPoint; //发送操作命令 TransferFiles.SendVarData(askSocket, System.Text.Encoding.Unicode.GetBytes("Backup")); //发送文件名 TransferFiles.SendVarData(askSocket, System.Text.Encoding.Unicode.GetBytes(ffname)); //备份IP地址 string bakaddress = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(askSocket)); string[] IPstrArray = bakaddress.Split(new string[] { "@", "/" }, StringSplitOptions.RemoveEmptyEntries); askSocket.Close(); IPEndPoint iipep = new IPEndPoint(IPAddress.Parse(IPstrArray[0]), Convert.ToInt32(IPstrArray[1])); //指向远程服务端节点 Socket ssSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { ssSocket.Connect(iipep); //连接到Monitor } catch { SetText("连接服务器出错!"); ssSocket.Close(); return; } //获取文件名 不包含存储路径 string fullPath = FileSavePath + ffname; FileInfo EzoneFile = new FileInfo(fullPath); //创建一个文件对象 FileStream EzoneStream = EzoneFile.OpenRead(); //打开文件流 int PacketSize = 1024 * 1024; //包的大小1M int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize)); //包的数量 //最后一个包的大小 int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount))); //发送命令码 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes("Backup")); //发送[文件名]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name)); //发送[包的大小]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString())); //发送[包的总数量]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString())); //发送[最后一个包的大小]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString())); byte[] data = new byte[PacketSize]; //数据包 for (int i = 0; i < PacketCount; i++) //开始循环发送数据包 { //从文件流读取数据并填充数据包 EzoneStream.Read(data, 0, data.Length); //发送数据包 if (TransferFiles.SendVarData(ssSocket, data) == 3) { MessageBox.Show("文件传输出错!"); } } if (LastDataPacket != 0) //如果还有多余的数据包,则应该发送完毕! { data = new byte[LastDataPacket]; EzoneStream.Read(data, 0, data.Length); TransferFiles.SendVarData(ssSocket, data); } EzoneStream.Close(); //关闭文件流 ssSocket.Close(); //关闭套接字 this.SetText(ffname + "文件已备份到Server:" + IPstrArray[0] + "\n"); }
public void DataReturn(string fname) { string fn = fname; //获取文件名 不包含存储路径 IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(MonitorAddress.IP), MonitorAddress.Port); //指向远程服务端节点 Socket ssSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); try { ssSocket.Connect(ipep); //连接到Monitor } catch { SetText("连接服务器出错!"); ssSocket.Close(); return; } string fullPath = FileSavePath + fname; FileInfo EzoneFile = new FileInfo(fullPath); //创建一个文件对象 FileStream EzoneStream = EzoneFile.OpenRead(); //打开文件流 int PacketSize = 1024 * 1024; //包的大小1M int PacketCount = (int)(EzoneStream.Length / ((long)PacketSize)); //包的数量 //最后一个包的大小 int LastDataPacket = (int)(EzoneStream.Length - ((long)(PacketSize * PacketCount))); //发送命令码 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes("ProcessReturn")); //发送[文件名]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(EzoneFile.Name)); //发送[包的大小]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(PacketSize.ToString())); //发送[包的总数量]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(PacketCount.ToString())); //发送[最后一个包的大小]到服务器端 TransferFiles.SendVarData(ssSocket, System.Text.Encoding.Unicode.GetBytes(LastDataPacket.ToString())); byte[] data = new byte[PacketSize]; //数据包 for (int i = 0; i < PacketCount; i++) //开始循环发送数据包 { //从文件流读取数据并填充数据包 EzoneStream.Read(data, 0, data.Length); //发送数据包 if (TransferFiles.SendVarData(ssSocket, data) == 3) { MessageBox.Show("文件传输出错!"); } } if (LastDataPacket != 0) //如果还有多余的数据包,则应该发送完毕! { data = new byte[LastDataPacket]; EzoneStream.Read(data, 0, data.Length); TransferFiles.SendVarData(ssSocket, data); } EzoneStream.Close(); //关闭文件流 ssSocket.Close(); //关闭套接字 this.SetText(fname + "回传成功!" + "\n"); }