首页 > 解决方案 > 通信 tcp server c/client java

问题描述

我在交流服务器和 Java 客户端之间的通信方面遇到了一些问题。

我如何接受 c

void *connection_handler(void* args){
    int sock = *(int*)args;
    char op_code [sizeof(uint8_t)];
    char len [sizeof(uint8_t)];

    while(true){
        if(read(sock,&op_code,(sizeof(uint8_t)))==0 || atoi(op_code)==0)
          {printf("Error reading op_code\n");break;}

        if(read(sock,&len,(sizeof(uint8_t)))==0 || atoi(len)==0)
          {printf("Error reading len\n");break;}

        printf("op code->%d\n",atoi(op_code));
        printf("len ->%d\n",atoi(len));
    }

    printf("Client is now disconnected\n");
    close(sock);
    free((int*)args);
    pthread_exit(0);
}

我如何连接到服务器并在 java 中发送数据


       private void connectToServer(){
        try {
            SocketAddress sockaddr =
                    new InetSocketAddress(MainActivity.SERVER_IP, MainActivity.SERVER_PORT);
            socket = new Socket();
            socket.connect(sockaddr, 3000);
            dataOutputStream = new DataOutputStream(socket.getOutputStream());
            Log.d(TAG, "doInBackground: connesso");

        }
        catch (SocketTimeoutException te) {
            Log.d(TAG, "doInBackground: non connesso, time out exeption" + te);
            sendDataToActivity(MainActivity.ERROR, MainActivity.TIME_OUT_EXEPTION);
            te.printStackTrace();
        }
        catch (IOException e) {
            Log.d(TAG, "doInBackground: non connesso" + e);
            e.printStackTrace();
        }
    }

    /**
     * Send message to server.
     * @param username
     * @param psw
     */
    public void sendSignIn (String username,String psw){
        new Thread(){
            public void run(){
                //Invio il command_code e la lunghezza del messaggio al server

                try {
                    dataOutputStream.writeBytes("1");
                   // dataOutputStream.close();
                    dataOutputStream.writeBytes("2");
                    //dataOutputStream.writeBytes(username);
dataOutputStream.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }.start();
    }

此代码的输出

op_code -> 12 (Should be 1 but can't understand why my read read both)
len -> 2

可能问题是由 op_code 和 len 的大小引起的,但老实说我不明白如何解决它。有人可以照亮我吗?

标签: javacservertcpclient

解决方案


推荐阅读