Работа с сокетами
Релиб
Форумы       Участники    Календарь    Кто он-лайн?
Добро пожаловать, гость ( Вход | Регистрация )
        



Работа с сокетами Expand / Collapse
Автор
Сообщение
04.09.2007 12:30
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 15:10
Сообщ.: 2, Visits: 12
проблема состоит в том что я получаю не полные данные
Схематично это выглядит так: должно быть "трымпампам", а получаю "трымпамп"...


private string respose;

private class StateObject
{
// Client socket.
public Socket workSocket = null;
// Size of receive buffer.
public int BufferSize = 256;
// Receive buffer.
public byte[] buffer = new byte[256];
// Received data string.
public StringBuilder sb = new StringBuilder();
}

private void button1_Click(object sender, EventArgs e)
{
Socket client = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
StateObject state = new StateObject();

client.Connect("google.com", 80);
state.workSocket = client;
client.BeginReceive(state.buffer, 0, state.BufferSize, SocketFlags.None, new AsyncCallback(ReciveCallBack), state);

byte[] buff = Encoding.ASCII.GetBytes("GET / HTTP/1.0\r\r");
client.Send(buff);
}

private void ReciveCallBack(IAsyncResult ar) {
try {
StateObject state = (StateObject)ar.AsyncState;
Socket client = state.workSocket;
int bytesRead = client.EndReceive(ar);
MessageBox.Show(Convert.ToString(bytesRead));

if (bytesRead > 0)
{
state.sb.Append(Encoding.ASCII.GetString(state.buffer, 0, state.BufferSize));
client.BeginReceive(state.buffer, 0, state.BufferSize, SocketFlags.None, new AsyncCallback(ReciveCallBack), state);
}
else
{
MessageBox.Show(Encoding.ASCII.GetString(state.buffer, 0, state.BufferSize));
if (state.buffer.Length > 1)
{
respose = state.sb.ToString();
ReciveEndCallBack();
}
}
} catch (Exception e) {
MessageBox.Show(":( Error:\r\r"+e.ToString());
}
}

private void ReciveEndCallBack() {
//MessageBox.Show(respose);
FileStream file = new FileStream("c:\\1.txt", FileMode.Create);

byte[] buff = Encoding.ASCII.GetBytes(respose);
file.Write(buff, 0, buff.Length);
file.Close();
}
Сообщ. #915740
04.09.2007 13:18
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 04.09.2007 13:12
Сообщ.: 1, Visits: 2

byte[] buff = Encoding.ASCII.GetBytes(respose);

подозрение а кодировка точно ASCII

Если это запрос к HTTP серверу (судя по примеру) , может есть смысл изпользовать

System.Net.WebClient или System.Net.HttpWebRequest

Сообщ. #915741
04.09.2007 13:45
новичок

новичокновичокновичокновичокновичокновичокновичокновичок

участник
Last Login: 06.09.2007 15:10
Сообщ.: 2, Visits: 12
Я тоже про это думал... но решил попробывать поработать сначала с сокетами(только учу .НЕТ), а во вторых нужно еще картинки качать
Сообщ. #915742
« пред. тема | след. тема »


Эту тему читают Expand / Collapse
Посетители: 0 (0 гостей, 0 участников, 0 скрыт.участников)
Сейчас нет участников, просматривающих тему.
Модераторы: Alexey, boombastik, bazile, pl

Время GMT +3:00, Сейчас 12:22