2013-11-20 4 views
0

действительно вам нужна помощь.C# tcp socket server client connection

Мой проект состоит в том, чтобы подключить два ПК по кабелю и использовать разъем tcp отправить строку в форме текстового окна клиента на сервер. проблема в том, что i может просто отправить одну строку, тогда соединение закроется.

код клиента (C#): конечно, в попытке поймать пути:

 String str = textBox2.Text; 
     Stream stm = tcpclnt.GetStream(); 

     ASCIIEncoding asen = new ASCIIEncoding(); 
    byte[] ba = asen.GetBytes(str); 
textBox1.Text="Sending..."; 

stm.Write(ba,0,ba.Length); 

    byte[] bb = new byte[100]; 
    int k = stm.Read(bb,0,100); 

for (int i = 0;i < k; i++) 
{ 
    Console.Write(Convert.ToChar(bb[i])); 
    } 


    tcpclnt.Close(); 

////////////// 

код сервера: также в попытке поймать пути:

int k = 0; 
    byte[] b = new byte[100]; 
    for (; ;) 
    { 
     for (int i = 0; i < 100000; i++) 
     { } 
      k = s.Receive(b); 
     MessageBox.Show(k + ""); 
     textBox1.Text = "Recieved..."; 

     for (int i = 0; i < k; i++) 
     { 
      textBox2.Text = textBox2.Text + Convert.ToChar(b[i]); 
     } 
     MessageBox.Show(k + ""); 
     ASCIIEncoding asen = new ASCIIEncoding(); 
     s.Send(asen.GetBytes("Automatic message:" + "String received by server!")); 
     textBox1.Text = "\n Automatic message sent!"; 


     MessageBox.Show(k + ""); 
    s.Close(); 
     } 

мой вопрос: могу ли я сделать цикл на сервере для отправки не только одной строки, мне нужно отправить много строк без закрытия соединения.?

примечание: клиент и сервер будут выполнены каждый после нажатия кнопки в каждой форме.

примечание: соединение на некоторых портах будет установлено и будет выполнено в форме загрузки.

+0

Да, вы можете сделать петлю и отправить столько, сколько вы хотите. Вам не нужно закрывать сокет, пока вы не закончите. –

+0

Я не знаю, как, я делаю петлю на сервере, но k = s.recieve (b) застрял. –

ответ

0

Для начала перемещения закрытия из для цикла

int k = 0; 
    byte[] b = new byte[100]; 
    for (; ;) 
    { 
     for (int i = 0; i < 100000; i++) 
     { } 
     k = s.Receive(b); 
     MessageBox.Show(k + ""); 
     textBox1.Text = "Recieved..."; 

     for (int i = 0; i < k; i++) 
     { 
      textBox2.Text = textBox2.Text + Convert.ToChar(b[i]); 
     } 
     MessageBox.Show(k + ""); 
     ASCIIEncoding asen = new ASCIIEncoding(); 
     s.Send(asen.GetBytes("Automatic message:" + "String received by server!")); 
     textBox1.Text = "\n Automatic message sent!"; 


     MessageBox.Show(k + ""); 
    } 
    s.Close(); 
+0

Я сделал это 1 миллион раз, то же самое. посмотрите, что сообщение, которое возвращается клиенту с сервера: | Установленное соединение было прервано программным обеспечением на вашей главной машине –

+0

Возможно, вы можете показать нам весь код, так как клиент и сервер закрывают сокет после отправки/получения один раз – uncletall

+0

проблема на стороне клиента