Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 多个异步发送的相同缓冲区_.net_Sockets_Buffer_Send - Fatal编程技术网

.net 多个异步发送的相同缓冲区

.net 多个异步发送的相同缓冲区,.net,sockets,buffer,send,.net,Sockets,Buffer,Send,对并行运行的多个socket::send使用相同的缓冲区是否正确?我认为我的c#测试应用程序没有任何问题。但我没有看到任何关于这方面的例子或文档。因此,我正在寻找有关这方面的权威参考资料 using System; using System.Net; using System.Net.Sockets; namespace ReuseSocketBuffer { class Program { static byte[] reciveBuffer = new by

对并行运行的多个socket::send使用相同的缓冲区是否正确?我认为我的c#测试应用程序没有任何问题。但我没有看到任何关于这方面的例子或文档。因此,我正在寻找有关这方面的权威参考资料

using System;
using System.Net;
using System.Net.Sockets;

namespace ReuseSocketBuffer
{
    class Program
    {
        static byte[] reciveBuffer = new byte[1024];
        static byte[] senderBuffer = new byte[1024];

        static void Main(string[] args)
        {
            var sender = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            var listener = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

            listener.Bind(new IPEndPoint(IPAddress.Any, 0));
            listener.Listen(1);
            var ar1 = listener.BeginAccept(null, null);

            sender.Connect(new IPEndPoint(IPAddress.Loopback, (listener.LocalEndPoint as IPEndPoint).Port));

            var receiver = listener.EndAccept(ar1);

            receiver.BeginReceive(reciveBuffer, 0, reciveBuffer.Length, SocketFlags.None, ReceiveCallback, receiver);

            var ee = new SocketAsyncEventArgs[1024];

            senderBuffer[0] = 1;
            senderBuffer[1023] = 2;

            for (; ; )
            {
                for (int i = 0; i < ee.Length; i++)
                {
                    ee[i] = new SocketAsyncEventArgs();
                    ee[i].SetBuffer(senderBuffer, 0, senderBuffer.Length);
                }

                for (int i = 0; i < ee.Length; i++)
                    sender.SendAsync(ee[i]);
            }
        }

        static int count = 0;

        static void ReceiveCallback(IAsyncResult ar)
        {
            var receiver = ar.AsyncState as Socket;

            int received = receiver.EndReceive(ar);
            while (received < 1024)
                received += receiver.Receive(reciveBuffer, received, reciveBuffer.Length - received, SocketFlags.None);

            Console.Write("\r{0}", count++);

            if (reciveBuffer[0] != 1 || reciveBuffer[1023] != 2)
                throw new Exception();

            receiver.BeginReceive(reciveBuffer, 0, reciveBuffer.Length, SocketFlags.None, ReceiveCallback, receiver);
        }
    }
}
使用系统;
Net系统;
使用System.Net.Sockets;
命名空间ReuseSocketBuffer
{
班级计划
{
静态字节[]接收缓冲区=新字节[1024];
静态字节[]senderBuffer=新字节[1024];
静态void Main(字符串[]参数)
{
var sender=新套接字(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
var listener=newsocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
Bind(新的IPEndPoint(IPAddress.Any,0));
听,听(1);
var ar1=listener.beginacept(null,null);
Connect(新的IPEndPoint(IPAddress.Loopback,(listener.LocalEndPoint作为IPEndPoint.Port));
var receiver=listener.EndAccept(ar1);
receiver.BeginReceive(ReceiveBuffer,0,ReceiveBuffer.Length,SocketFlags.None,ReceiveCallback,receiver);
var ee=新的SocketAsyncEventArgs[1024];
senderBuffer[0]=1;
senderBuffer[1023]=2;
对于(;;)
{
for(int i=0;i
只要不修改缓冲区中的数据,就可以了