2011-11-25 1 views
0

네트워크 스트림을 사용하여 파일 이름 (예 : "text.txt")을 보내고 파일을 보냅니다. 서버는 이름을 읽고 데이터를 쓰는 쓰기 스트림을 작성하기로되어 있습니다. 서버가 이름을 가져 오기 위해 읽기 명령의 파일에서 이름 + 데이터를 가져 오는 문제. 나는 이것이 불분명하다고 생각한다. 질문은 파일 이름과 파일의 일부 데이터를 가져옵니다. 서버 녹화네트워크 스트림을 사용하는 동기화 논리

ASCIIEncoding asci = new ASCIIEncoding(); 
TcpClient clientSocket = new TcpClient(textBox2.Text, 8880); 
NetworkStream networkStream = clientSocket.GetStream(); 
byte[] b = asci.GetBytes(s);//s is the name of the file 
networkStream.Write(b, 0, b.Length); 
networkStream.Flush(); 

while(true) 
{ 
    file = fileStream.Read(fileBuffer,0,fileBuffer.Length); 
    networkStream.Write(fileBuffer,0,file); 
    if(file == 0) break; 
} 

코드 : 파일 이름을 전송 코드는 데이터를 파일. 이름 및 데이터를

byte [] buffer2 = new byte[1]; 
String filename = ""; 
ASCIIEncoding asci = new ASCIIEncoding(); 

while (true) 
{ 
    int k = networkStream.Read(buffer2, 0, buffer2.Length); 
    filename = filename+asci.GetString(buffer2, 0, k); 
    if (k == 0) break; 
} 

using (Stream fileStream = File.OpenWrite("C:/Users/Laptop/Documents/" + filename)) 
{ 
    while (true) 
    { 
     thisRead = networkStream.Read(dataByte, 0, blockSize); 

     fileStream.Write(dataByte, 0, thisRead); 
     if (thisRead == 0) break; 

    } 

감사합니다. 나는 내가 어떻게 말을하거나 문제를 설명 할 줄 몰랐다.

+0

while (x! = y) {/*...*/}와 while (true) {/*...*/ if (x == y) 휴식;}을 바꿀 수 있습니다. 이렇게하면 코드의 가독성이 향상됩니다. – PVitt

답변

1

파일 이름의 끝을 나타내는 내용을 보내야합니다. 이 또는이 중지 문자를받지 못하면 서버는 파일 이름을 수신하고 나중에 페이로드를받습니다.

예를 들어 HTTP는 \r\n\r\n을 사용하여 HTTP 헤더의 끝을 표시합니다.

+0

감사합니다 "?" 부호 또는 구분 기호가 이제는 제대로 작동합니다. – user1065401

+0

@ user1065401 : 내 대답이 도움이된다면, 내 대답을 upvote하거나 문제를 해결 한 대답으로 받아 들일 수 있습니다. – PVitt