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
Sockets 异常,但仅在第3次-IAsyncResult对象未从此类上相应的异步方法返回_Sockets_Exception_Delegates_Tcpclient_Iasyncresult - Fatal编程技术网

Sockets 异常,但仅在第3次-IAsyncResult对象未从此类上相应的异步方法返回

Sockets 异常,但仅在第3次-IAsyncResult对象未从此类上相应的异步方法返回,sockets,exception,delegates,tcpclient,iasyncresult,Sockets,Exception,Delegates,Tcpclient,Iasyncresult,我有一个遗留的(2008年)Windows服务应用程序(使用System.ServiceProcess.ServiceBase),我需要以一种与它现在的工作方式略有不同的方式来使用它。此时,它启动并在特定端口上创建一个TCPLISTENER,供客户端应用程序连接(它只连接一次),以便向侦听端口发送/接收请求。这一切都很好。但是,自适应需要使用web应用程序连接到侦听器端口,然后正常发送/rcv,但在接收之后必须断开(*) (*-如果每次测试后web应用程序都不必断开与侦听套接字的连接,那就更好了

我有一个遗留的(2008年)Windows服务应用程序(使用System.ServiceProcess.ServiceBase),我需要以一种与它现在的工作方式略有不同的方式来使用它。此时,它启动并在特定端口上创建一个TCPLISTENER,供客户端应用程序连接(它只连接一次),以便向侦听端口发送/接收请求。这一切都很好。但是,自适应需要使用web应用程序连接到侦听器端口,然后正常发送/rcv,但在接收之后必须断开(*)

(*-如果每次测试后web应用程序都不必断开与侦听套接字的连接,那就更好了,但我无法理解如何实现这一点。我可以将TCP连接保持在会话状态以供重复使用吗?)

无论如何,对于第一个两个连接/发送/rcv/断开连接测试,自适应都可以正常工作,但是在第三个上,服务在套接字类的EndAccept中抛出ArgumentException

我不明白为什么第三次考试不及格


这是一个简单的测试客户端

公共类ConnectDisconnectTCP
继承System.Web.UI.Page
私有IP为String=“127.0.0.1”
专用端口为Int32=10002
专用mTCP作为System.Net.Sockets.TCP客户端
专用netStrm作为NetworkStream
受保护的子页加载(ByVal sender作为对象,ByVal e作为System.EventArgs)处理Me.Load
端接头
受保护的子按钮1\u单击(发送者作为对象,e作为事件参数)处理按钮1。单击
Dim oEnc作为新的ASciencoding
尺寸扫描文本为String=“100000000093001X”+vbLf
Dim mTCP作为System.Net.Sockets.TCP客户端
'连接并创建TCP客户端
mTCP=新系统.Net.Sockets.TCP客户端(IP,端口)
netStrm=mTCP.GetStream()
netStrm.WriteAsync(oEnc.GetBytes(ScanText.ToString),0,ScanText.ToString.Length)
如果netStrm.CanRead,则
将myReadBuffer(1024)设置为字节
Dim myCompleteMessage As StringBuilder=新建StringBuilder()
Dim NumberOfBytes读取为整数=0
'传入消息可能大于缓冲区大小。
做
numberOfBytesRead=netStrm.Read(myReadBuffer,0,myReadBuffer.Length)
myCompleteMessage.AppendFormat(“{0}”,Encoding.ASCII.GetString(myReadBuffer,0,numberOfBytesRead))
netStrm.database可用时循环
如果结束
“接近
netStrm.Close()
mTCP.Close()'处理此TcpClient实例并请求关闭底层TCP连接。
mTCP=无
Label1.Text=“已关闭”
端子端类

这是服务上的TCPListener类,它完成了所有的工作

导入系统
导入System.IO
导入系统.Net
导入System.Net.Sockets
导入系统线程
导入系统文本
公共类TCPListenerPort
私有currentAsynchResult作为IAsyncResult
作为客户端状态的私有cState
私有servSock作为新套接字(AddressFamily.InterNetwork、SocketType.Stream、ProtocolType.Tcp)
专用m_连接状态为Int32=0
Dim sData As String=String.Empty
“柜台
公共cnt作为Int32=0
公共rcvcnt作为Int32=0
作为Int32的公共帐户=0
公共sndcnt作为Int32=0
公共sndcal作为Int32=0
公共cncnt作为Int32=0
"公共事件",
公共事件连接状态(ByVal enmState作为Int32)
公共事件数据到达(ByVal strData作为对象)
公共分新()
端接头
公共子新建(ByVal dr作为数据行)
端接头
受保护的覆盖子完成()
尝试
如果不是cState,那么什么都不是
cState.ClntSock.Close()
如果结束
如果不是servSock,那就什么都不是了
servSock.Close()
如果结束
特例
投手
最后
MyBase.Finalize()
结束尝试
端接头
私有类客户端状态
Public Const BUFSIZE As Integer=1024
Public mrcvBuffer As Byte()=新字节(BUFSIZE-1){}
Public mSendBuffer As Byte()=新字节(BUFSIZE-1){}
专用mclntSock作为套接字=无
Public Sub New(ByRef clntSock作为套接字)
mclntSock=clntSock
ReDim mrcvBuffer(BUFSIZE)
重拨mSendBuffer(BUFSIZE)
端接头
公共只读属性SckConnected()为布尔值
得到
SckConnected=mclntSock.已连接
结束
端属性
公共只读属性RcvBuffer()作为字节()
得到
RcvBuffer=mrcvBuffer
结束
端属性
公共只读属性SendBuffer()作为字节()
得到
SendBuffer=mSendBuffer
结束
端属性
公共只读属性ClntSock()作为套接字
得到
ClntSock=mclntSock
结束
端属性
末级
公共子连接(ByVal TCPPort为Int32,ByVal积压为Int32)
尝试
cState=newclientstate(servSock)
cState.ClntSock.Bind(新的IPEndPoint(System.Net.IPAddress.Any,TCPPort))
cState.ClntSock.听(100)'5
虽然是真的
cncnt=cncnt+1
System.Diagnostics.Debug.WriteLine(“连接时”+cncncnt.ToString)
currentAsynchResult=servSock.BeginAccept(新的AsyncCallback(AddressOf AcceptCallback),cState)
currentAsynchResult.AsyncWaitHandle.WaitOne()
结束时
捕获未使用的ObjectDisposedException 1作为ObjectDisposedException
捕获e作为例外
结束尝试
端接头
专用子AcceptCallback(ByVal asyncResult作为IAsyncResult)
尝试
acccnt=a
    [12572] TcpClient#57416410::TcpClient(AddressFamily#2)
    [12572] Socket#61940669::Socket(AddressFamily#2)
    [12572] Exiting Socket#61940669::Socket() 
    [12572] Exiting TcpClient#57416410::TcpClient() 
    [12572] TcpClient#57416410::TcpClient()
    [12572] Exiting TcpClient#57416410::TcpClient() 
    [12572] Socket#15193904::Socket(AddressFamily#2)
    [12572] Exiting Socket#15193904::Socket() 
    [17872] Socket#40528290::Socket(AddressFamily#2)
    [17872] Exiting Socket#40528290::Socket() 
    [17872] Socket#40528290::Bind(0.0.0.0:10002#10002)
    [17872] Exiting Socket#40528290::Bind() 
    [17872] Socket#40528290::Listen(Int32#100)
    [17872] Exiting Socket#40528290::Listen() 
    in connect WHILE 1
    [17872] Socket#40528290::BeginAccept()
    [17872] Exiting Socket#40528290::BeginAccept()  -> AcceptAsyncResult#515737
    The thread '1' (0x6674) has exited with code 0 (0x0).
    The thread '<No Name>' (0x1df8) has exited with code 0 (0x0).
    The thread '<No Name>' (0x5dac) has exited with code 0 (0x0).
    [7984] Socket#49538252::Socket()
    [7984] Exiting Socket#49538252::Socket() 
    in connect WHILE 2
    AcceptCallback Start1
    [17872] Socket#40528290::BeginAccept()
    [7984] Socket#40528290::EndAccept(AcceptAsyncResult#515737)
    [17872] Exiting Socket#40528290::BeginAccept()  -> AcceptAsyncResult#27334100
    System.Net.Sockets Information: 0 : [7984] Socket#49538252 - Accepted connection from 127.0.0.1:63817 to 127.0.0.1:10002.
    [7984] Exiting Socket#40528290::EndAccept()     -> Socket#49538252
    127.0.0.1:63817
    [7984] Socket#49538252::BeginReceive()
    [7984] Exiting Socket#49538252::BeginReceive()  -> OverlappedAsyncResult#62696216
    AcceptCallback End 1
    [22168] Data from Socket#49538252::PostCompletion
    [22168] 00000000 : 32 30 30 30 30 30 30 30-30 30 38 33 30 30 31 58 : 100000000093001X <-- SCANTEXT RECEIVED, TEST1
    [22168] 00000010 : 0A                                              : .
    ReceiveCallback In 1
    [22168] Socket#49538252::EndReceive(OverlappedAsyncResult#62696216)
    [22168] Exiting Socket#49538252::EndReceive()   -> Int32#17
    ReceiveCallback receiveMsgSize 17
    [22168] Socket#49538252::BeginSend()
    [22168] Exiting Socket#49538252::BeginSend()    -> OverlappedAsyncResult#13462887
    A first chance exception of type 'System.FormatException' occurred in Microsoft.VisualBasic.dll
    [19228] Data from Socket#49538252::PostCompletion
    [19228] 00000000 : 07                                              : . <-- RESPONSE RECEIVED, TEST1
    [19228] Socket#49538252::EndSend(OverlappedAsyncResult#13462887)
    [19228] Exiting Socket#49538252::EndSend()  -> Int32#1
    [19228] Socket#49538252::BeginReceive()
    [19228] Exiting Socket#49538252::BeginReceive()     -> OverlappedAsyncResult#25961440
    SendCallBack 1 1
    [7984] Data from Socket#49538252::PostCompletion
    [7984] 00000000 :                                                 : 
    ReceiveCallback In 2
    [7984] Socket#49538252::EndReceive(OverlappedAsyncResult#25961440)
    [7984] Exiting Socket#49538252::EndReceive()    -> Int32#0
    ReceiveCallback Exit 2
    ReceiveCallback Exit 2
    [22168] Socket#31352595::Socket()
    [22168] Exiting Socket#31352595::Socket() 
    AcceptCallback Start2
    in connect WHILE 3
    [17872] Socket#40528290::BeginAccept()
    [22168] Socket#40528290::EndAccept(AcceptAsyncResult#27334100)
    [17872] Exiting Socket#40528290::BeginAccept()  -> AcceptAsyncResult#39421196
    System.Net.Sockets Information: 0 : [22168] Socket#31352595 - Accepted connection from 127.0.0.1:63820 to 127.0.0.1:10002.
    [22168] Exiting Socket#40528290::EndAccept()    -> Socket#31352595
    127.0.0.1:63820
    [22168] Socket#31352595::BeginReceive()
    [22168] Exiting Socket#31352595::BeginReceive()     -> OverlappedAsyncResult#28002689
    AcceptCallback End 2
    [7984] Data from Socket#31352595::PostCompletion
    [7984] 00000000 : 32 30 30 30 30 30 30 30-30 30 38 33 30 30 31 58 : 100000000093001X <-- SCANTEXT RECEIVED, TEST2
    [7984] 00000010 : 0A                                              : .
    ReceiveCallback In 3
    [7984] Socket#31352595::EndReceive(OverlappedAsyncResult#28002689)
    [7984] Exiting Socket#31352595::EndReceive()    -> Int32#17
    ReceiveCallback receiveMsgSize 17
    [7984] Socket#31352595::BeginSend()
    [7984] Exiting Socket#31352595::BeginSend()     -> OverlappedAsyncResult#31071611
    [22168] Data from Socket#31352595::PostCompletion
    A first chance exception of type 'System.FormatException' occurred in Microsoft.VisualBasic.dll
    [22168] 00000000 : 07                                              : . <-- RESULT RECEIVED, TEST2
    [22168] Socket#31352595::EndSend(OverlappedAsyncResult#31071611)
    [22168] Exiting Socket#31352595::EndSend()  -> Int32#1
    [22168] Socket#31352595::BeginReceive()
    [22168] Exiting Socket#31352595::BeginReceive()     -> OverlappedAsyncResult#51673536
    SendCallBack 2 1
    [4640] Data from Socket#31352595::PostCompletion
    [4640] 00000000 :                                                 : 
    ReceiveCallback Exit 3
    The thread '<No Name>' (0x4b1c) has exited with code 0 (0x0).
    ReceiveCallback In 4
    [4640] Socket#31352595::EndReceive(OverlappedAsyncResult#51673536)
    [4640] Exiting Socket#31352595::EndReceive()    -> Int32#0
    ReceiveCallback Exit 4
    [4640] Socket#37088038::Socket()
    [4640] Exiting Socket#37088038::Socket() 
    AcceptCallback Start3
    [4640] Socket#49538252::EndAccept(AcceptAsyncResult#39421196)
    in connect WHILE 4
    [17872] Socket#40528290::BeginAccept()
    [17872] Exiting Socket#40528290::BeginAccept()  -> AcceptAsyncResult#8948635
    //ERROR THROWN HERE
    AcceptCallback End 3
    TCP    0.0.0.0:10002 LON-WKS-ZER01:0      LISTENING
    TCP    0.0.0.0:10002          LON-WKS-ZER01:0      LISTENING
    TCP    127.0.0.1:10002        apps:59574             ESTABLISHED
    TCP    127.0.0.1:59574        apps:10002             ESTABLISHED
   TCP    0.0.0.0:10002          LON-WKS-ZER01:0      LISTENING
   TCP    127.0.0.1:10002        apps:59574             CLOSE_WAIT
   TCP    127.0.0.1:59574        apps:10002             FIN_WAIT_2
 TCP    0.0.0.0:10002          LON-WKS-ZER01:0      LISTENING
clntSock = servSock.ClntSock.EndAccept(asyncResult)
Dim clientState As  New ClientState(servSock)
clientState.ClntSock.Bind(New IPEndPoint(System.Net.IPAddress.Any, TCPPort))
clientState.ClntSock.Listen(Backlog)

While True
    Dim result As IAsyncResult = servSock.BeginAccept(New AsyncCallback(AddressOf AcceptCallback), clientState)
    result.AsyncWaitHandle.WaitOne()
End While