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#的并置问题。我想。如果需要,我很乐意提供更多信息:)