Java(Mac)& C ++(windows)Tcp连接和发送& recv消息

时间:2017-10-22 12:56:33

标签: java c++ networking

早上好。我有一个问题,我问你以下问题。

我在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]总是包含奇怪的值,并且消息输出不正确。

信息末尾会打印正确的信息。

为什么?

0 个答案:

没有答案