#region FILE TRANSFER USING C#.NET SOCKET - CLIENT
class FTClient
{
public static string curMsg_client = "Idle";
public static void SendFile(string fileName)
{
try
{
//IPAddress[] ipAddress = Dns.GetHostAddresses("localhost");
//IPEndPoint ipEnd = new IPEndPoint(ipAddress[0], 5656);
string IpAddressString = "192.168.1.102";
IPEndPoint ipEnd_client = new IPEndPoint(IPAddress.Parse(IpAddressString), 5656);
Socket clientSock_client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
string filePath = "";
fileName = fileName.Replace("\\", "/");
while (fileName.IndexOf("/") > -1)
{
filePath += fileName.Substring(0, fileName.IndexOf("/") + 1);
fileName = fileName.Substring(fileName.IndexOf("/") + 1);
}
byte[] fileNameByte = Encoding.UTF8.GetBytes(fileName);
if (fileNameByte.Length > 5000 * 1024)
{
curMsg_client = "File size is more than 5Mb, please try with small file.";
return;
}
curMsg_client = "Buffering ...";
string fullPath = filePath + fileName;
byte[] fileData = File.ReadAllBytes(fullPath);
byte[] clientData = new byte[4 + fileNameByte.Length + fileData.Length];
byte[] fileNameLen = BitConverter.GetBytes(fileNameByte.Length);
fileNameLen.CopyTo(clientData, 0);
fileNameByte.CopyTo(clientData, 4);
fileData.CopyTo(clientData, 4 + fileNameByte.Length);
curMsg_client = "Connection to server ...";
clientSock_client.Connect(ipEnd_client);
curMsg_client = "File sending...";
clientSock_client.Send(clientData, 0, clientData.Length, 0);
curMsg_client = "Disconnecting...";
clientSock_client.Close();
curMsg_client = "File [" + fullPath + "] transferred.";
}
catch (Exception ex)
{
if (ex.Message == "No connection could be made because the target machine actively refused it")
curMsg_client = "File Sending fail. Because server not running.";
else
curMsg_client = "File Sending fail." + ex.Message;
}
}
}
#endregion
#region FILE TRANSFER USING C#.NET SOCKET - SERVER
class FTServer
{
IPEndPoint ipEnd_server;
Socket sock_server;
public FTServer()
{
string IpAddressString = "192.168.1.102";
ipEnd_server = new IPEndPoint(IPAddress.Parse(IpAddressString), 5656);
sock_server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.IP);
sock_server.Bind(ipEnd_server);
}
public static string receivedPath = @"C:\";
public static string curMsg_server = "Stopped!";
public void StartServer()
{
try
{
curMsg_server = "Starting...";
sock_server.Listen(100);
curMsg_server = "Running and waiting to receive file.";
Socket clientSock = sock_server.Accept();
clientSock.ReceiveBufferSize = 16384;
byte[] clientData = new byte[1024 * 50000];
int receivedBytesLen = clientSock.Receive(clientData, clientData.Length, 0);
curMsg_server = "Receiving data...";
int fileNameLen = BitConverter.ToInt32(clientData, 0);
string fileName = Encoding.UTF8.GetString(clientData, 4, fileNameLen);
BinaryWriter bWrite = new BinaryWriter(File.Open(receivedPath + fileName, FileMode.Append));
bWrite.Write(clientData, 4 + fileNameLen, receivedBytesLen - 4 - fileNameLen);
while (receivedBytesLen > 0)
{
receivedBytesLen = clientSock.Receive(clientData, clientData.Length, 0);
if (receivedBytesLen == 0)
{
bWrite.Close();
}
else
{
bWrite.Write(clientData, 0, receivedBytesLen);
}
}
curMsg_server = "Saving file...";
bWrite.Close();
clientSock.Close();
curMsg_server = "Received and Archived file [" + fileName + "] (" + (receivedBytesLen - 4 - fileNameLen) + " bytes received); Server stopped.";
}
catch (SocketException ex)
{
curMsg_server = "File Receving error.";
MessageBox.Show(String.Format("{0} Error code: {1}", ex.Message, ex.ErrorCode));
}
}
}
#endregion
http://stackoverflow.com/questions/12087145/file-transfer-using-sockets-c-received-file-doesnt-contain-full-data
'Programming > C#' 카테고리의 다른 글
특수 폴더(시스템 폴더 등) 가져오기(SHGetSpecialFolderPath) (0) | 2011.12.18 |
---|---|
대리자와 콜백 함수 (0) | 2011.11.09 |
응용프로그램에서 관리자 권한 (0) | 2011.11.09 |
Windows Service 에서 Username 구하기 (0) | 2011.11.08 |