C ++套接字服务器无法从C#Client接收NetworkStream.Write()

时间:2018-03-11 08:40:13

标签: c# c++ sockets mono

C ++套接字服务器从我的C ++客户端接收标准消息,没有任何问题。现在我尝试用C#编写客户端,它连接没有任何问题。

当我尝试从C#客户端向C ++服务器发送一条简单的消息时,我的问题出现了。通过一些研究,我认为 C ++期望缓冲区的长度为255,并且它不会输出消息,因为它不知道消息的长度但是我不确定如何使用C#进行沟通。

C ++ Server在一个单独的线程上从每个客户端读取数据,如下所示。

void Socket::thread (int newsockfd) {

    char buffer[256];
    int n;
    std::cout << "Waiting to read client messages\n";
    n = read(newsockfd,buffer,255);

    if (n < 0){
        std::cout << "Failed to read from socket\n";
        return;
    }

    printf("Received Message %s",buffer);

}

C#Client按如下方式将数据发送到服务器。

try {

    socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

    socket.Connect(endpoint);

    NetworkStream stream = new NetworkStream(socket, true);

    if (stream.CanWrite){
        byte[] message = Encoding.UTF8.GetBytes("Hello World");

        stream.Write(message, 0, message.Length);

        Debug.Log("Wrote message to stream with " + message.Length.ToString() + " length.");
    }

    stream.Close();
    socket.Close();

} catch (SocketException e) {             
    Debug.Log("Socket exception: " + e);         
}

一切都运行得很好,连接成功,但没有任何消息通过,所以我认为消息可能已成功写入,但C ++不知道何时停止阅读。

对于记录,这里是C ++客户端如何发送消息(只是一个较短的摘录)。

char buffer[256];

bzero(buffer,256);
fgets(buffer,255,stdin);

n = write(sockfd,buffer,strlen(buffer));
if (n < 0) 
     std::cout << "Error writing to socket\n";

close(sockfd);

哪个工作正常,并按预期发送消息。我真的只是遇到了C ++和C#的并置问题。我想。如果需要,我很乐意提供更多信息:)

0 个答案:

没有答案