簡體   English   中英

將C#客戶端連接到C ++服務器

[英]Connect C# client to C++ server

我很沮喪,我無法正常工作。

我的C ++代碼( _detailsaddrinfo*_socketSOCKET ):

struct addrinfo hints;
_socket = socket(AF_INET, SOCK_STREAM, 0);
if (_socket < 0)
    throw "Invalid socket";
ZeroMemory(&hints, sizeof(hints));
hints.ai_family = AF_INET;
hints.ai_socktype = SOCK_STREAM;
hints.ai_protocol = IPPROTO_TCP;
hints.ai_flags = AI_PASSIVE;


if (getaddrinfo(NULL, Port.c_str(), &hints, &_details) != 0)
{
    throw "GetAddrInfo failed";
}

if ((bind(_socket, _details->ai_addr, this->_details->ai_addrlen)) != 0)
{
    throw "Bind Unsuccessful";
}

freeaddrinfo(this->_details);
if (listen(this->_socket, SOMAXCONN) != 0)
        throw "Listen Unsuccessful";
client = accept(this->_socket, (struct sockaddr*)&client_addr, &addrlen);

一個簡單的C ++服務器。 C ++和Python客戶端可以與上述服務器完美配合,並按預期完成所有操作。

然后是客戶:

        Socket s;

        IPAddress ip = Dns.GetHostEntry("127.0.0.1").AddressList[0];
        int port = 7777;
        IPEndPoint remoteEP = new IPEndPoint(ip, port);

        s = new Socket(AddressFamily.InterNetworkV6,
            SocketType.Stream, ProtocolType.Tcp);

        bool isConnected = false;
        while (!isConnected)
        {
            try
            {
                s.Connect(remoteEP);
                isConnected = true;
            }
            catch (Exception e1)
            {
                System.Threading.Thread.Sleep(2000);
            }
        }

C#客戶端與C#服務器完美配合。

所有這些都一起工作-他們只是沒有。 我嘗試連接到服務器,但是客戶端始終最終拋出System.Net.Sockets SocketException ,錯誤代碼為10061 ,聲稱C ++服務器拒絕了它。

SO上的一個線程問了一個類似的問題,得到的答案是,每個連接請求后他都應該睡覺,然后再試一次(如您所見,已經完成)。

另一個站點上的另一個線程聲稱問題出在服務器上,並且他將C ++服務器參數從主機字節順序轉換為網絡字節順序:

listenSocketAddress.sin_port = htons((u_short)port);
listenSocketAddress.sin_addr.S_un.S_addr = htonl(INADDR_ANY);

但是我使用的addrinfo不包含與sockaddr_in相同的變量。

如何連接這兩個?

據我所知,您的C ++ AF_INET在使用IPv4( AF_INET ),而您的C# AddressFamily.InterNetworkV6在使用IPv6( AddressFamily.InterNetworkV6 )。 更改服務器以使用IPv6,或更改客戶端以使用IPv4。 或者理想情況下,讓他們使用最有效的方式,並使用主機名代替IP地址。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM