C#套接字接收方法不接收数据

C#套接字接收方法不接收数据,c#,sockets,proxy,C#,Sockets,Proxy,我有一个奇怪的问题,需要别人的帮助。我有一个程序作为代理链的一部分。它从一个事物接收数据并发送到另一个事物。我唯一的问题是receive方法不接收任何内容。它只是冻结在那里。我的节目: 假设链中有四个节点:A、B、C和D A是一种网络浏览器 B是我的C#程序 C是我的客户 D是一个网站 B同时监听C和A。我知道这很奇怪,但我需要这样配置它。我怎么才能让这个该死的程序工作?我已经设置了大量代码,但是由于某种原因,C没有从B接收到任何东西。C连接到B,但C不会接收任何东西。有人能帮我吗 我已打开所有

我有一个奇怪的问题,需要别人的帮助。我有一个程序作为代理链的一部分。它从一个事物接收数据并发送到另一个事物。我唯一的问题是receive方法不接收任何内容。它只是冻结在那里。我的节目:

假设链中有四个节点:A、B、C和D

A是一种网络浏览器

B是我的C#程序

C是我的客户

D是一个网站

B同时监听C和A。我知道这很奇怪,但我需要这样配置它。我怎么才能让这个该死的程序工作?我已经设置了大量代码,但是由于某种原因,C没有从B接收到任何东西。C连接到B,但C不会接收任何东西。有人能帮我吗

我已打开所有端口,B和C的防火墙都已关闭。A和B都在本地计算机上运行。要为您提供一些IP:

A连接到127.0.0.1:3056

B侦听127.0.0.1:3056,B侦听IP地址。任意:3055

C连接到我的IP地址:3055,C连接到B告诉它的任何地方

其中MY_IP_ADDRESS是从whatismyip.com获取的我的全局IP地址

为什么C没有收到任何东西?以下是一些相关代码:

客户(C):

服务器(B):


它们确实是同时打开的。

客户端和服务器都在开始时调用
Receive
。因此,客户端和服务器都将阻塞,直到它们能够返回至少一个字节或报告EOF为止。由于两人都在等待传入的数据,所以实际上两人都没有时间发送任何东西。所以:僵局


另外:对
Receive
的两个调用都未能捕获返回值,返回值告诉您读取了多少数据-这是一个很大的错误。特别是,如果您甚至不能保证您拥有完整的字符数,则无法使用多字节编码(如UTF-8)进行解码-从技术上讲,您可以从50个字符的序列中获得两个和三分之一的字符。

感谢您的快速响应!我可以设置Blocking=false吗?@user1951033否;Receive从根本上说是一个阻塞调用—它会阻塞,直到它可以返回EOF或至少一个字节(假设没有超时,并且tht不是一个好主意)。现在,执行BeginReceive或ReceiveAsync可能有意义。
Socket reqSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ip = new IPEndPoint(IPAddress.Parse("MY_IP_ADDRESS"), 3055);
reqSocket.Connect(ip);
byte[] ReqData = new byte[8192];
MessageBox.Show("BYTE"); // This runs, (click OK)
reqSocket.Receive(ReqData);
String ReqString = Encoding.UTF8.GetString(ReqData);
MessageBox.Show(ReqString); // This does not
TcpListener listener = new TcpListener(IPAddress.Parse("127.0.0.1"), 3056);
listener.Start();
Socket Localhost = listener.AcceptSocket();
listener.Stop();
TcpListener listener2 = new TcpListener(IPAddress.Any, 3055);
listener2.Start(50);
Socket toSocket = listener2.AcceptSocket();
listener2.Stop();
byte[] buf = new byte[8192];
Localhost.Receive(buf);
toSocket.Send(buf);
MessageBox.Show("Sent!"); // This runs