如题

解决方案 »

  1.   

    to csShooter:
    进行连接的端口是由系统分配的啊,已经被占用的就不应该分配了吧
      

  2.   

    关闭进程,同一端口不可以同时使用。
    =======================================
    不能关闭进程,程序执行时不间断的向10个目标端口发送数据,发送数据的过程为:
    1 创建到目标端口的连接(Socket.Connect)
    2 发送数据(Socket.Send)
    3 等待接收数据,超时时间为1秒(Socket.Recive)
    4 关闭连接(Socket.Close)发送数据的工作是多线程同时进行,每个目标端口对应的发送线程数量是3个,
    那么10个目标端口就是30个发送线程。
      

  3.   

    不能关闭进程,程序执行时不间断的向10个目标端口发送数据,发送数据的过程为:
    1 创建到目标端口的连接(Socket.Connect)
    2 发送数据(Socket.Send)
    3 等待接收数据,超时时间为1秒(Socket.Recive)
    4 关闭连接(Socket.Close)
    把打开关闭端口放到线程外面去,线程只管发送,不管打开关闭端口,这样就不会造成冲突了,不过你多线程同时发送要注意接收端能不能正确分离。
      

  4.   

    把打开关闭端口放到线程外面去,线程只管发送,不管打开关闭端口,这样就不会造成冲突了,不过你多线程同时发送要注意接收端能不能正确分离。
    ========================================================更详细的过程应该是:
    1 准备要发送的数据(5000条),放入队列(Queue<string>)
    2 为每个目标端口创建3个发送线程
    3 每个发送线程检查队列中是否有数据需要发送,如果有,则创建到目标端口
      的连接,发送数据,接收数据(超时为1秒),最后关闭连接。
    4 队列中没有数据,则发送线程退出。这样的操作流程没有办法把端口的打开和关闭操作放到线程外面去做。另外,连接的创建和关闭代码如下:
    Socket socket = null;
    try
    {
        //创建连接
    }
    catch(Exception ex)
    {
        //输出异常
    }
    finally
    {
        if (socket!=null)
        {
            try
            {
                //关闭连接
            }
            catch(Exception exx)
            {
                //输出异常
            }
        }
    }程序运行阶段没有在关闭连接处发生过异常,所以应该可以确定每次连接的关闭都是成功的。
      

  5.   

    我不明白的是,socket.connect时所用到的本地端口号是系统分配的,它应该分配给我的是当前没有被使用的吧,如果是这样,就不应该出现“通常每个套接字地址(协议/网络地址/端口)只允许使用一次”的异常吧。
      

  6.   

    to 它应该分配给我的是当前没有被使用的吧没错,但是系统分配的是你用于连接的PORT,而不是你要连接的PORT。也就是说你要连接192.168.56.6:6666这个地址吧,那么192.168.56.6这台机器的6666端口被占用了,所以报错了,而你用于连接192.168.56.6:6666的本机端口是系统指定的。
      

  7.   

    没错,但是系统分配的是你用于连接的PORT,而不是你要连接的PORT。也就是说你要连接192.168.56.6:6666这个地址吧,那么192.168.56.6这台机器的6666端口被占用了,所以报错了,而你用于连接192.168.56.6:6666的本机端口是系统指定的。==============================================但是目标端口是有监听队列长度的啊,我设置的是1000。
    那么按照你的意思,也就是说目标端口的监听队列已满,所以才会报这个错误,是吗?