1. socket.receive,socket如何携带cookie?
byte [] buffer = new byte[2000]; while (!isExit) { int length = skt.Receive(buffer, 0, 2000, SocketFlags.None)
; if (length > 0) { string res = Encoding.GetEncoding("gb2312").GetString(buffer,0,length); showmsg("【收到数据】\r\n"+res+"\r\n",Color.LightGreen)
; getcks(res); showmsg("得到Cookie "+cks,Color.Red); } }
2. 中tcp服务端怎么向客户端发送数据?
将该字节数组中的数据发送给客户端。发送数据的步骤如下
1. 创建一个Socket对象,并使用Bind方法绑定IP地址和端口号。
2. 使用Listen方法开始监听客户端的连接请求。
3. 使用Accept方法接受客户端的连接,并返回一个新的Socket对象用于与客户端通信。
4. 使用Receive方法接收客户端发送的数据。
5. 使用Send方法向客户端发送数据。
原因Send方法是Socket类提供的用于发送数据的方法,通过调用该方法可以将数据发送给客户端。
3. 怎么清空socket接收缓存区?
清空socket缓存区的数据的方法 由于socket是以数据流的形式发送数据,接收方不知道对方一次性发送了多少数据,也能保证对方一次性发送的数据能在同一刻接收到,所以Receive方法是这么工作的: 接受一个byye[]类型的参数作为缓冲区,在经过一定的时间后把接收到的数据填充到这个缓冲区里面,并且返回实际接收到数据的长度,这个实际接收到的数据长度有可能为0(没有接收到数据)、大于0小于缓冲区的长度(接收到数据,但是没有我们预期的多)、等于缓冲区的长度(说明接收到的数据大于等于我们预期的长度)。 每次接收缓冲区都用同一个byte[] byteMessage,并且你没有检查接收到的数据长度,所以第一次你接收到的数据是123456,第二次你只接收到了8,但是缓冲区里面还有23456,所以加起来就是823456了。 socket接收缓冲区的大小有讲究,设置大了接收起来慢,因为它要等尽可能多的数据接收到了再返回;设置小了需要重复多次调用接收方法才能把数据接收完,socket有个属性,标识了系统默认的接收缓冲区大小,可以参考这个! 还有就是用recv读取,但是由于不知道缓存里有多少数据,如果是阻塞模式,到最后必然等到超时才知道数据已经读取完毕,这是个问题。 另一个是用fgetc,通过返回判断是否是feof: whlie (1) { a=fgetc(f);if (feof(f)) break;//… b=fgetc(f);if (feof(f)) break;//… } 当然,我不知道读取完毕后最后一次调用fgetc会不会堵塞,需要测试。
4. udp如何接收指定网卡的数据包?
1. C# UDP可以接收指定网卡的数据包。2. 这是因为在C#中,可以使用Socket类来创建UDP套接字,并使用Bind方法将套接字绑定到指定的IP地址和端口号。通过指定网卡的IP地址,可以确保只接收该网卡上的数据包。3. 除了指定网卡的IP地址,还可以使用SocketOptionName枚举中的SocketOptionName.ReuseAddress选项来允许多个套接字绑定到同一个IP地址和端口号,这样可以实现多个网卡接收数据包的功能。另外,还可以使用Socket类的ReceiveFrom方法来接收指定网卡上的数据包,并使用IPAddress类的ToString方法将接收到的IP地址转换为字符串形式进行处理。
5. GetLastError返回10022错误是指什么意思?
Message too long.
A message sent on a datagram socket was larger than the internal message buffer or some other network limit, or the buffer used to receive a datagram was smaller than the datagram itself.
错误代码10040:消息长度太长
你在UDP套接字上所发送的消息长度大于底层网络栈所提供的缓冲区大小或者UDP通信标准数据报的大小上限。
6. 中通信结束后一定要关闭socket?
服务器端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第二步:建立一个Socket对像;
第三步:用socket对像的Bind()方法绑定EndPoint;
第四步:用socket对像的Listen()方法开始监听;
第五步:接受到客户端的连接,用socket对像的Accept()方法创建新的socket对像用于和请求的客户端进行通信;第六步:通信结束后一定记得关闭socket;客户端:
第一步:用指定的端口号和服务器的ip建立一个EndPoint对像;
第二步:建立一个Socket对像;
第三步:用socket对像的Connect()方法以上面建立的EndPoint对像做为参数,向服务器发出连接请求;
第四步:如果连接成功,就用socket对像的Send()方法向服务器发送信息;
第五步:用socket对像的Receive()方法接受服务器发来的信息 ;第六步:通信结束后一定记得关闭socket;从上面的客户端和服务器就可以看出 socket 需要占用很多的资源包括硬件资源和虚拟端口资源以及建立的链接通道和监听线程。为什么关闭 就是因为他占用了很多的系统资源。