IPHostEntry ipHost = Dns.Resolve("localhost");
IPAddress ipAdr = ipHost.AddressList[0];
IPEndPoint ipEnd = new IPEndPoint(ipAdr, 11000);
Socket sListener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//назначение сокета
sListener.Bind(ipEnd);
sListener.Listen(10);
//начинаем слушать соединения
while (true)
{
Socket handler = sListener.Accept();
string sql = null;
//дождались клиента который хочет соеденится
while (true)
{
byte[] bytes = new byte[1024];
int s = handler.Receive(bytes);
sql += Encoding.ASCII.GetString(bytes, 0, s);
OleDbDataAdapter DA = new OleDbDataAdapter(sql);
DataTable DT = new DataTable("Tovar");
DA.Fill(DT);
datagridview.DataSource = DT;
//отправка таблицы
byte[] tabl = Encoding.ASCII.GetBytes(DT);
handler.Send(tabl);
}
handler.Shutdown(SocketShutdown.Both);
handler.Close();
Передача DataTable клиенту
Сервер:
Код:
При компилировании выдает такие ошибки:
cannot convert from 'string' to 'System.Data.OleDb.OleDbCommand'
cannot convert from 'System.Data.DataTable' to 'char[]'
сериализация. В вашем случае возможно удобнее будет воспользоваться методом WriteXml и классом NetworkStream, но может быть есть и более элегантные решения, применимые именно в такой ситуации.
Если конкретно по ошибкам, то первая возникает судя по всему в строке инициализации DA: конструктор, принимающий единственный параметр, ожидает тип OleDBCommand, а вы передаете String. Либо используйте другой конструктор (например, с двумя параметрами типа String), либо создайте экземпляр класса OleDBCommand и передавайте его. Вторая ошибка вытекает из более глобального вопроса: вы пытаетесь передать объект класса DataTable через сокет побайтно? Сразу хочу сказать - этот подход не сработает. В .NET существует такая вещь, как