2013-03-20 28 views
7

C# içinde soket gerektiren bir sunucu uygulaması için birim sınamalarının nasıl yazılacağını anlamaya çalışıyorum. İsteğin işlenmesi için bir soketten okumam gerekiyor. Java'da Streams kullanarak soketlerden kaçınabildim, bu yüzden birim testleri yazarken bir dizeyi kolayca bir akıma dönüştürebiliyordum. C# birim sınama kullanarak sınamalar

// ====== Input ====== 
InputStream socketInputStream = new InputStream(socket.getInputStream()); 
// or using string instead like this 
InputStream socketInputStream = new ByteArrayInputStream("string".getBytes()); 

BufferedReader in = new BufferedReader(new InputStreamReader(socketInputStream)); 

// ====== Output ====== 
OutputStream socketOutputStream = new OutputStream(socket.getOutputStream()); 
// I need to write byte[] to the stream 
BufferedOutputStream out = new BufferedOutputStream(socketOutputStream); 

Sadece NetworkStream() bulundu ama aynı zamanda bir soket gerektirir.

Bunu C# 'da nasıl yapabilirim? Ve bir Akışıma nasıl yazabilirim ve mesajın doğru olup olmadığını görmek için tekrar okuyabilir miyim?

+0

Belki [MemoryStreambaytlık] (http://msdn.microsoft.com/en-us/library/system. bir byte [] tarafından desteklenen io.memorystream.aspx). Bir dize yazmak istiyorsanız ve "kodlama" için bir kodlama yapmanız gerekiyorsa [Encoding.GetBytes] gibi bir kodlama kullanabilirsiniz (http://msdn.microsoft.com/en-us/library/ds4kkd55%28v=vs .100% 29.aspx) dizgeyi byte'a çevirmek için [] – nkvu

+0

byte [] ile destekleniyorsa, bir soketten okumak için nasıl kullanabilirim? Programın dize veya soket ile yaratılıp yaratılmamış olursa olsun bir akış elde edebilmesi gerekir. – dnanon

cevap

4

[nkvu - Bu yorumu ve yorum yazımına dayanarak posterin sorusunu temel alan yanıtın içine taşıma; senin birim testlerinde

InputStream socketInputStream = new ByteArrayInputStream("string".getBytes()); 

(Ben orijinal sorusuna göre varsayıyorum):

Yani Java yapıyorsun] Andrey en gök @ çalmaya çalışıyor değil.

C# size yapabileceği: -ish eşdeğer C# (Bir süre gerçek dünya Java yapmadıysanız belirterek) olacağını

Stream socketInputStream = new MemoryStream(Encoding.UTF8.GetBytes("string")); 

. MemoryStream yalnızca Stream'un bir alt sınıfı olduğundan, veriyi okumak için genel Akış yöntemlerini kullanabilirsiniz (örneğin, Read()).

Ayrıca MemoryStream yazabilirsiniz, örneğin:

bytes[] toWrite = Encoding.UTF8.GetBytes("Write to stream"); 
Stream writeToStream = new MemoryStream(); 
writeToStream.Write(toWrite, 0, toWrite.Length); 

HTH Nathan

İlgili konular