http://www.sufeinet.com/plugin.php?id=keke_group

苏飞论坛

 找回密码
 马上注册

QQ登录

只需一步,快速开始

分布式系统框架(V2.0) 轻松承载百亿数据,千万流量!讨论专区 - 源码下载 - 官方教程

HttpHelper爬虫框架(V2.7-含.netcore) HttpHelper官方出品,爬虫框架讨论区 - 源码下载 - 在线测试和代码生成

HttpHelper爬虫类(V2.0) 开源的爬虫类,支持多种模式和属性 源码 - 代码生成器 - 讨论区 - 教程- 例子

查看: 15063|回复: 15

[Winform] 通过socket进行post提交,Cookie又怎么搞呢?

[复制链接]
发表于 2013-9-22 14:43:05 | 显示全部楼层 |阅读模式
在弄一个东东,不是很懂,就是用POST方式给类似网页聊天室这种交流网页提交数据, 现在做到的地不是能提交上去, 用的是HttpWebRequest, 现在的问题是怎么接收别人发来的消息呢,监听怎么做? 还是说用Socket方式比较好? 那Socket该如何做? 有个简单的例子最好,含有带Cookie的提交跟监听收到消息 {:soso_e144:}


1. 开通SVIP会员,免费下载本站所有源码,不限次数据,不限时间
2. 加官方QQ群,加官方微信群获取更多资源和帮助
3. 找站长苏飞做网站、商城、CRM、小程序、App、爬虫相关、项目外包等点这里
 楼主| 发表于 2013-9-22 14:48:42 | 显示全部楼层
我乐了 QQ截图20130922144745.png
发表于 2013-9-22 15:06:21 | 显示全部楼层
呵呵,这个如果用Http的方式一般是刷数据库的方式,就是把两方聊天的信息存到数据库定时去刷新,最好使用Socket的方式比较好一些。

你可以SO一个网站有例子。关于Socket聊天这块的
 楼主| 发表于 2013-9-22 18:06:58 | 显示全部楼层
站长苏飞 发表于 2013-9-22 15:06
呵呵,这个如果用Http的方式一般是刷数据库的方式,就是把两方聊天的信息存到数据库定时去刷新,最好使用So ...

我这怎么收不到数据?
[code=csharp]StringBuilder shi= new StringBuilder();
            shi.Append("GET /tmp/g.php HTTP/1.1\r\n");
            //shi.Append("Accept: */*");
            shi.Append("Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*\r\n");
            shi.Append("Referer: http://localhost/tmp/l.php\r\n");
            shi.Append("Accept-Language: zh-CN\r\n");
            shi.Append("User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)\r\n");
            shi.Append("Accept-Encoding: gzip, deflate\r\n");
            shi.Append("Host: localhost\r\n");
            shi.Append("Connection: Keep-Alive\r\n");
            shi.Append("Cookie:"+cks);
            sendMsg(shi.ToString());[/code]

然后是接收部分   ,用POST的时候能行,  get 貌似吧后面的HTTP/1.1拿掉可以get得到内容,上面的这些参数都是用Httpwatch直接复制过来的
  1. byte [] buffer = new byte[2000];
  2.             while (!isExit)
  3.             {
  4.                 int length = skt.Receive(buffer, 0, 2000, SocketFlags.None);
  5.                 if (length > 0)
  6.                 {
  7.                     string res = Encoding.GetEncoding("gb2312").GetString(buffer,0,length);
  8.                     showmsg("【收到数据】\r\n"+res+"\r\n",Color.LightGreen);
  9.                     getcks(res);
  10.                     showmsg("得到Cookie "+cks,Color.Red);
  11.                 }
  12.             }
复制代码
 楼主| 发表于 2013-9-22 18:10:41 | 显示全部楼层
fuck, 我搞定了,  Cookie后面多加一个\r\n就行了呀, 而且Cookie能用,能登陆后拿到想要的数据  吼吼
 楼主| 发表于 2013-9-22 18:12:06 | 显示全部楼层
本帖最后由 lyg1112 于 2013-9-22 18:20 编辑

xyz.png
这个错误怎么弄啊  飞飞大哥
是不是每次用完了都要断开  然后下次用的时候再次连接?
不对啊  那怎么接收数据呢?
 楼主| 发表于 2013-9-22 18:18:17 | 显示全部楼层
站长苏飞 发表于 2013-9-22 15:06
呵呵,这个如果用Http的方式一般是刷数据库的方式,就是把两方聊天的信息存到数据库定时去刷新,最好使用So ...

还一个问题  为什么获取来的COokie 比httpwatch的多了个 path=/  
发表于 2013-9-23 08:00:41 | 显示全部楼层
path=/  这个是Cookie的路径,是必须有的,只不过是httpwatch不显示。
Socket是长连接就是一次连接就是一个会话,可以发送多条,或者是说N条数,你如果用来做Http,那肯定是用一次释放一次了。
 楼主| 发表于 2013-9-23 09:39:04 | 显示全部楼层
站长苏飞 发表于 2013-9-23 08:00
path=/  这个是Cookie的路径,是必须有的,只不过是httpwatch不显示。
Socket是长连接就是一次连接就是一 ...

那这样的话怎么实时的接受消息呀,
发表于 2013-9-23 09:50:00 | 显示全部楼层
Socket就是时时的呀,什么时候用什么时候发,你用Socket发送Http这确实有点得瑟了,有现成的Http请求你不用。你非要用Socket实现,我说的使用Socket,是使用Socket发送,并不是让你发送Http请求。

Http不管用什么发送都不可能时时。
您需要登录后才可以回帖 登录 | 马上注册

本版积分规则

QQ|手机版|小黑屋|手机版|联系我们|关于我们|广告合作|苏飞论坛 ( 豫ICP备18043678号-2)

GMT+8, 2024-11-16 05:50

© 2014-2021

快速回复 返回顶部 返回列表