111,129
社区成员
发帖
与我相关
我的任务
分享
namespace mydemo
{
class MyConnection
{
public void StartAccess( string urlStr ,int port , string path , string submitmethod, string postdata, TextBox list )
{
byte[] data = new byte[187385];
int datalen = postdata.Length;
IPHostEntry gist = Dns.GetHostEntry( urlStr );
//得到所访问的网址的IP地址
IPAddress ip = gist.AddressList[0];
IPEndPoint ipEnd = new IPEndPoint(ip, port);
//使用tcp协议 stream类型 (IPV4)
Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
try
{
socket.Connect(ipEnd);
}
catch(SocketException e)
{
MessageBox.Show("连接目标服务器失败。\n1、可能目标服务器已不可用。\n2、地址填写错误。");
Console.Write(e.ToString());
return;
}
//这里请求的相对地址,如果访问直接www.baidu.com则不需要,可以为空.
MessageBox.Show(Convert.ToString(datalen));
StringBuilder buf = new StringBuilder();
buf.Append(submitmethod+" ").Append("http://"+urlStr).Append(path).Append(" HTTP/1.1\r\n");
buf.Append("Host: "+urlStr+"\r\n");
buf.Append("Connection: keep-alive\r\n");
buf.Append("Referer: http://"+urlStr+path+"\r\n");
buf.Append("Content-Length: "+datalen+"\r\n");
buf.Append("Cache-Control: max-age=0\r\n");
buf.Append("Origin: http://"+urlStr+"\r\n");
buf.Append("Accept: application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\n");
buf.Append("Content-Type: application/x-www-form-urlencoded\r\n");
buf.Append("User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.2; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.63 Safari/534.3\r\n");
buf.Append("Accept-Encoding: gzip,deflate,sdch\r\n");
//buf.Append("Accept-Language: zh-CN,zh;q=0.8\r\n");
buf.Append("Accept-Charset: utf-8\r\n");
//buf.Append("Cookie: rtime=0; ltime=1286510985674; cnzz_eid=53214426-1286510969-\r\n");
buf.Append("\r\n");
buf.Append(postdata);
buf.Append("\r\n");
byte[] ms = System.Text.UTF8Encoding.UTF8.GetBytes(buf.ToString());
//发送
socket.Send(ms);
int recv =0;
do
{
//下面这句有问题。
recv = socket.Receive(data);
//如果请求的页面meta中指定了页面的encoding为gb2312则需要使用对应的Encoding来对字节进行转换
list.Text += (Encoding.UTF8.GetString(data, 0, recv));
//list.Text += (Encoding.Default.GetString(data, 0, recv));
} while (recv != 0);
//禁用上次的发送和接受
socket.Shutdown( SocketShutdown.Both );
socket.Close();
}
}
}