2013-04-29 5 views
2

Я попытался отправить данные на клиента, используя эту функциюПередача данных от сервера

protected void SendData(Socket so, string sendData) 
{ 
    byte[] data = Encoding.ASCII.GetBytes(sendData); 
    so.Send(data); 

    Console.WriteLine("Sending data back to Client\n"); 
} 

Я называю эту функцию на этой функции

protected void ProcessData(int x, string data, Socket so) 
{ 
    if (x < mybuffersize) 
    { 
     data = data.Trim(); 
     SendData(so, data); 
    } 
} 

свою работу хорошо .. и отправить данные, полученные сервером от клиента. , но когда я изменил его на это,

protected void ProcessData(int x, string data, Socket so) 
{ 
    if (x < mybuffersize) 
    { 
     data = data.Trim(); 
     SendData(so, data); 
     string sendData = "Testing send string"; 
     SendData(so, sendData); 
    } 
} 

Клиент будет получать только данные, которые он послать ко мне, но не строка Testing send string. Я делаю что-то неправильно или есть какие-то ограничения?

+0

Вы получаете какие-либо исключения из блока отправки сервера? –

+0

Где код вашего клиента? Как это получить *? – I4V

+0

Вы создали код для обработки запросов клиентов? – saeed

ответ

0

Я обнаружил, что проблема с отправка данных,

кажется, что мой клиент (вспышка) получит строку, если я добавить что-то вроде этого:

protected void ProcessData(int x, string data, Socket so) 
{ 
    if (x < mybuffersize) 
    { 
     data = data.Trim(); 
     SendData(so, data); 
     string sendData = "Testing send string\0"; 
     SendData(so, sendData); 
    } 
} 

если кто-нибудь может объяснить, почему, пожалуйста, добавьте в комментарии этого ответа, ТНХ

1

Мы можем использовать TCP-сообщения для отправки данных клиенту с использованием асинхронной связи.

Сервер Оправа Initialize и попробуйте подключиться:

// Specify the size according to your need. 
private byte[] bytData = new byte[1024 * 50000]; 
private Socket oServerSocket; 

private void WindowLoaded(object sender, RoutedEventArgs e) 
{ 
    try 
    { 
     // We are using TCP sockets 
     this.oServerSocket = new Socket(
     addressFamily: AddressFamily.InterNetwork, 
     socketType: SocketType.Stream, 
     protocolType: ProtocolType.Tcp); 

     // Assign the any IP of the hardware and listen on port number which the hardware is sending(here it's 5656) 
     var oIPEndPoint = new IPEndPoint(address: IPAddress.Any, port: 5656); 

     // Bind and listen on the given address 
     this.oServerSocket.Bind(localEP: oIPEndPoint); 
     this.oServerSocket.Listen(backlog: 4); 

     // Accept the incoming clients 
     this.oServerSocket.BeginAccept(this.OnAccept, null); 
    } 
    catch (Exception ex) 
    { 
     // Handle Exception 
    } 
} 

об успешном соединении:

private void OnAccept(IAsyncResult ar) 
{ 
    try 
    { 
     var oClientSocket = this.oServerSocket.EndAccept(asyncResult: ar); 

     // Start listening for more clients 
     this.oServerSocket.BeginAccept(callback: this.OnAccept, state: null); 

     // Once the client connects then start receiving the commands from her 
     oClientSocket.BeginReceive(
     buffer: this.bytData, 
     offset: 0, 
     size: this.bytData.Length, 
     socketFlags: SocketFlags.None, 
     callback: this.OnReceive, 
     state: oClientSocket); 
    } 
    catch (Exception ex) 
    { 
     // Handle Exception 
    } 
} 

Процесса сообщение получил:

private void OnReceive(IAsyncResult ar) 
{ 
    try 
    { 
     var oClientSocket = (Socket)ar.AsyncState; 
     oClientSocket.EndReceive(asyncResult: ar); 

     /* Process the data here 

     BitConverter.ToInt32(value: this.bytData, startIndex: 0); 
     string SomeString= Encoding.ASCII.GetString(bytes: this.bytData, index: 8, count: 5); 

     */ 

     // Specify the size according to your need. 
     this.bytData = null; 
     this.bytData = new byte[1024 * 50000]; 
     oClientSocket.BeginReceive(
      buffer: this.bytData, 
      offset: 0, 
      size: this.bytData.Length, 
      socketFlags: SocketFlags.None, 
      callback: this.OnReceive, 
      state: oClientSocket); 
    } 

    catch (Exception ex) 
    { 
     // Handle Exception 
    } 
} 
+0

что вы пытаетесь показать мне здесь? создание сервера? Вы получили то, что я прошу? или мой вопрос не ясен? – Diom

+0

В приведенном выше коде показано, как отправить сообщение с сервера на клиент. –

+0

Я знаю, как ... но то, что я хочу спросить, заключается в том, что, делая то же самое для разных данных, кажется, мои данные не получены правильно ... проверьте мой вопрос ... все еще спасибо за ответ ... – Diom

0

Потому что мы не Не знаете, что делает сервер, и как он получает данные, можете ли вы попробовать это и посмотреть, что получает сервер:

protected void ProcessData(int x, string data, Socket so) 
{ 
    if (x < mybuffersize) 
    { 
     string sendData = "Testing send string\0"; 
     SendData(so, sendData); 
     data = data.Trim(); 
     SendData(so, data); 
    } 
} 
+0

well , на самом деле я уже получил ответ ... просто добавив '\ 0' в конец строки ... клиент теперь может принимать мои данные ... так что спасибо ... – Diom

Смежные вопросы