2014-04-01 2 views
0

서버 클라이언트 응용 프로그램이 있습니다. 서버와 클라이언트는 TCP와 스트림을 사용하여 파일을 송수신 할 수 있습니다. 파일 전송이 같은 내 수업에서 자신의 스레드를 가지고 리스너에서 처리됩니다스레드 수신기에 인수 전달

static void Main(string[] args) 
{ 
    Thread thread = new Thread(new ThreadStart(Listen)); 
    thread.Start(); 
} 

그리고 듣기 방법 (간체) :

private static void Listen() 
{ 
    using (TcpClient tcpClient = tcpListener.AcceptTcpClient()) 
    { 
     using (FileStream stream = new FileStream("fullFilePath.ext", FileMode.Create, FileAccess.ReadWrite)) 
     { 
      // writing stream here 
     } 
    } 
} 

나는 사용하여 파일 스트림을 전송 (간체) : 그것은 잘 작동하지만 난 그 듣기 때문에 인수를 전달하는 방법을 알아낼 수 없습니다

public void SendFile(string destination, int transferPort) 
{ 
    using (TcpClient tcpClient = new TcpClient(destination, transferPort)) 
    { 
     using (NetworkStream networkStream = tcpClient.GetStream()) 
     { 
      // read bytes, write, and flush here 
     } 
    } 
} 

() 나는 그것을 전달할 수있는 '동적'인수를 가질 수 있습니다. 예를 들어, "fullFilePath.ext"는 동적이어야합니다.

도움을 주시면 감사하겠습니다.

감사합니다.

+1

여기에서 성취하고자하는 것은 매우 명확하지 않은 것처럼 보입니다. 어떤 종류의 매개 변수를 SendFile에 전달하고 어떻게 동적으로 Listen에 영향을 줍니까? –

+0

@JesseCarter, 생각은 "fullFilePath.ext"를 Listen() 메서드의 동적 값으로 변경할 수있게하는 것입니다. 그러나 메서드가 스레드로 시작되므로 어떻게 구현할 수 있을지 확신 할 수 없습니다. Listen()에 전달하기 위해 SendFile()의 'destination'인수가 필요합니다. – user3276006

+0

'ThreadStart' 사용은 더 이상 사용되지 않습니다. 람다를 건네 줘. – usr

답변

2

나는 당신이 성취하고자하는 것을 이해하고 불행히도 당신이 묘사하는 방식으로는 불가능하다고 생각합니다. 네트워크 연결을 통해 통신을 수행 할 때 데이터는 바이트 단위로 보내지며 다른 쪽에서 함께 다시 보내야합니다. 직렬화를 사용하면 실제 객체를 스트림을 통해 전송할 수 있습니다.이 객체는 다른 끝에 함께 다시 배치 될 수 있습니다.

는 주로 네트워크를 통해 텍스트 파일을 전송하고 파일 이름을 유지하려면, 당신은 간단한 클래스 정의 고려해 볼 수 있습니다 : 리스너 스레드에서

public class TransportFileInfo() { 
    string FileName { get; set; } 
    string FileContents { get; set; } 
} 

을, 당신은 바이트에 해당받을 직렬화 된 TransportFileInfo를 가져온 다음 객체 형식으로 다시 역 직렬화합니다. 이 시점에서 FileStream과 FileContents에 액세스하여 출력 스트림을 적절하게 전달할 수 있습니다.

C# 바이너리 직렬화로 인터넷 검색을하는 경우 유용한 정보를 찾을 수있을 것입니다.

+0

XML, XLS 및 기타 파일 형식을 보내고 있습니다. 그게 효과가 있니? 어쨌든 바이너리 직렬화에 대한 정보를 확인하겠습니다. Jesse! – user3276006

+0

여러 유스 케이스에 따라 다른 유형을 정의해야 할 수도 있지만, 네트워크 통신은 일반적으로 양측의 일종의 직렬화 프로세스를 통해 수행되는 정보의 유연성을 위해 수행됩니다. 텍스트 기반 파일 유형의 경우, 내가 정의한 것과 비슷한 간단한 클래스를 사용하여 파일을 보낼 수 있습니다. –