private void ServerRoutine(int ListenPort) { try { IPEndPoint listenIPEndPoint = new IPEndPoint(IPAddress.Any, ListenPort); Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); listenSocket.Bind(listenIPEndPoint); listenSocket.Listen(10); MessageBox.Show(String.Format("Start hosting accepting {0} IP,{1} port", listenIPEndPoint.Address, listenIPEndPoint.Port)); while (true) { Socket clientSocket = listenSocket.Accept(); try { Task.Run(() => ServeOneClient(clientSocket)); } catch (Exception ex) { MessageBox.Show(ex.Message); NetOps.SendReply(ex.Message, clientSocket); } } } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void BtnPull_Click(object sender, EventArgs e) { FileStream receivedFileStream = null; FileStream undoFile = null; try { NetOps.SendAcknowledgement(NetOps.SignalPull, clientSocket); string pulledFileName = PulledFileName; NetOps.ReceiveFile(clientSocket, ref pulledFileName); //pulledFileName = new FileStream(pulledFileName, FileMode.Open); //undoFile = new FileStream(UndoFileName, FileMode.Create); //OpenOrCreate if pull dont delete client work //CopyStream(undoFile, receivedFileStream); ClearCanvasAndState(pulledFileName); //DrawAllFileFiguresAndRefreshCount(receivedFileStream, out undoFiguresCount);//может лучше рисовать все фигуры принитого файла и сериализовать их а не аппендить файл и рисовать полученнный? } catch (Exception ex) { MessageBox.Show(ex.Message); } finally { if (receivedFileStream != null) { receivedFileStream.Dispose(); } if (undoFile != null) { undoFile.Dispose(); } } }
private void BtnDisconnect_Click(object sender, EventArgs e) { try { NetOps.SendAcknowledgement(NetOps.SignalDisconnect, clientSocket); clientSocket.Disconnect(true); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void BtnCommit_Click(object sender, EventArgs e) { try { NetOps.SendAcknowledgement(NetOps.SignalCommit, clientSocket); NetOps.SendFile(UndoFileName, clientSocket); } catch (Exception ex) { MessageBox.Show(ex.Message); } }
private void ServeOneClient(Socket clientServeSocket) { bool isServeEnd = false; int clientSignal = NetOps.SignalDisconnect; byte[] buf = new byte[1024]; IPEndPoint clientEP = (IPEndPoint)clientServeSocket.RemoteEndPoint; MessageBox.Show(String.Format("Connected with {0} at port {1}", clientEP.Address, clientEP.Port)); while (!isServeEnd) { try { clientSignal = NetOps.GetAcknowlegment(clientServeSocket); switch (clientSignal) { case NetOps.SignalDisconnect: isServeEnd = true; MessageBox.Show(String.Format("Client ip {0} at port {1} disconnect", clientEP.Address, clientEP.Port)); clientServeSocket.Disconnect(false); clientServeSocket.Dispose(); break; case NetOps.SignalPull: NetOps.SendFile(UndoFileName, clientServeSocket); break; case NetOps.SignalCommit: string receivedFileName = ReceivedFileName; NetOps.ReceiveFile(clientServeSocket, ref receivedFileName); CommitFile(receivedFileName); FileStream undoFile = new FileStream(UndoFileName, FileMode.OpenOrCreate); DrawAllFileFiguresAndRefreshCount(undoFile, out undoFiguresCount); undoFile.Dispose(); break; default: NetOps.SendAcknowledgement(NetOps.SignalError, clientServeSocket); break; } } catch (Exception ex) { MessageBox.Show(ex.Message); NetOps.SendAcknowledgement(NetOps.SignalError, clientServeSocket); NetOps.SendReply(ex.Message, clientServeSocket); } } }