C#中的异步tcp客户端正在连接到API。。。零星错误
我正在用C#编写一个TCP客户端,用于连接第三方API服务器。供应商坚持认为问题在于我们的代码。他们提供了一个示例TCP client.exe,以针对他们的API进行测试。我通常成功地使用他们的应用程序和数据包发送器连接到他们的API。不过,我无法在代码中找出问题所在,因此我希望能得到一些帮助,帮助我发现哪里出了问题 我必须进行初始调用以确保设置正确,然后才能进行API调用。似乎API调用只在异步调用时返回结果。我将连续获得2到3次成功的结果,然后我将获得一条无法识别的错误消息,而无需访问供应商的源代码。我从MSDN示例或其他著名的地方获得了这段代码,但似乎每隔5次调用(当我收到错误时是不一致的)API就会出错(它会挂起并停止响应,直到我重新启动它)。有人能帮我调试代码吗?我对它进行了一般化,这样我就不会在这里放置任何特定于供应商API的内容C#中的异步tcp客户端正在连接到API。。。零星错误,c#,api,sockets,asynchronous,tcp,C#,Api,Sockets,Asynchronous,Tcp,我正在用C#编写一个TCP客户端,用于连接第三方API服务器。供应商坚持认为问题在于我们的代码。他们提供了一个示例TCP client.exe,以针对他们的API进行测试。我通常成功地使用他们的应用程序和数据包发送器连接到他们的API。不过,我无法在代码中找出问题所在,因此我希望能得到一些帮助,帮助我发现哪里出了问题 我必须进行初始调用以确保设置正确,然后才能进行API调用。似乎API调用只在异步调用时返回结果。我将连续获得2到3次成功的结果,然后我将获得一条无法识别的错误消息,而无需访问供应商
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Sockets;
using System.Text;
using System.Threading.Tasks;
namespace tcp
{
class AsyncClient
{
static void Main(string[] args)
{
SetInitialSetting();
ConnectAsTcpClient();
Console.ReadLine();
}
private static void SetInitialSetting()
{
byte[] data = new byte[1024];
string stringData;
IPAddress ip;
int port;
int recv;
IPAddress.TryParse(@"127.0.0.1", out ip);
port = 10000;
SetInitialSettingString();
Console.WriteLine("[Client] Writing request {0}", ClientRequestString);
using (var client = new TcpClient(ip.ToString(), port))
{
NetworkStream ns = client.GetStream();
ns.Write(ClientRequestBytes, 0, ClientRequestBytes.Length);
stringData = "";
do
{
recv = ns.Read(data, 0, data.Length);
stringData = stringData + Encoding.UTF8.GetString(data, 0, recv);
}
while (ns.DataAvailable);
Console.WriteLine("[Client] Server response was {0}", stringData);
ns.Close();
}
}
private static async void ConnectAsTcpClient()
{
byte[] data = new byte[10025];
IPAddress ip;
int port;
IPAddress.TryParse(@"127.0.0.1", out ip);
port = 10000;
using (var tcpClient = new TcpClient())
{
Console.WriteLine("[Client] Connecting to server");
await tcpClient.ConnectAsync(ip, port);
Console.WriteLine("[Client] Connected to server");
using (var networkStream = tcpClient.GetStream())
{
SetAPICallString();
Console.WriteLine("[Client] Writing request {0}", ClientRequestString);
await networkStream.WriteAsync(ClientRequestBytes, 0, ClientRequestBytes.Length);
var buffer = new byte[4096];
var byteCount = await networkStream.ReadAsync(buffer, 0, buffer.Length);
var response = Encoding.UTF8.GetString(buffer, 0, byteCount);
Console.WriteLine("[Client] Server response was {0}", response);
}
}
}
private static string ClientRequestString;
private static byte[] ClientRequestBytes;
private static void SetInitialSettingString()
{
ClientRequestString = "StringThatSetsTheAPISettingGoesHere";
ClientRequestBytes = Encoding.UTF8.GetBytes(ClientRequestString);
}
private static void SetAPICallString()
{
ClientRequestString = "StringForTheCallToTheAPIThatINeedGoesHere";
ClientRequestBytes = Encoding.UTF8.GetBytes(ClientRequestString);
}
}
}