早上好。我有一个问题,我问你以下问题。
我在Mac环境下使用Java进行网络编程,在Windows环境下使用C ++进行网络编程。
代码如下所示:
Java(Mac)Tcp服务器
import java.net.*;
import java.io.*;
import.java.util.Date;
import.java.text.SimpleDateFormat;
public class TcpServer
{
ServerSocket serverSocket = null;
public static void Main(String args[])
{
try
{
serverSocket = new ServerSocket(12345);
System.out.println(getTime() + "Ready");
}
catch(IOException e)
{
e.printStackTrace();
}
while(true)
{
try
{
System.out.println(getTime() + "Wait");
Socket client = serverSocket.accept();
System.out.println(getTime() + "Connect");
OutputStream out = client.getOutputStream();
DataOutputStream dos = new DataOutputStream(out);
// send to client
dos.writeUTF("[Notice] Test Message1 from Server");
System.out.println(getTime() + "Write");
dos.close();
client.close();
}
catch(IOException e)
{
e.printStackStrace();
}
}
}
static String getTime()
{
SimpleDateFormat f = new SimpleDateFormat("[hh:mm:ss]");
return f.format(new Date());
}
}
和C ++(Windows)Tcp客户端:
int main()
{
WSAData wsaData;
WSAStartup(MAKEWORD(2, 2), &wsaData);
SOCKET sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
SOCKADDR_IN servAddr{};
servAddr.sin_family = AF_INET;
inet_pton(AF_INET, "192.168.1.23", &servAddr.sin_addr.s_addr);
servAddr.sin_port = htons(12345);
connect(sock, (SOCKADDR*)&servAddr, sizeof SOCKADDR_IN);
char buffer[256];
// receive a message like "\0\[Notice] Test Message1 from Server"
int length = recv(sock, buffer, 255, 0);
buffer[length] = '\0';
std::cout << buffer << std::endl;
closesocket(sock);
WSACleanup();
}
从Java发送消息并用C ++检查消息时,缓冲区[0]和缓冲区[1]总是包含奇怪的值,并且消息输出不正确。
信息末尾会打印正确的信息。
为什么?