在 C 上工作的 send() 套接字但是 Java 从 bufferedReader 读取没有得到响应

send() socket working on C but Java read from the bufferedReader doesn't get response

我有一个特别的问题,这是代码

void sendThread(struct List* list){
bool listening = true;
char sent[1024] = "";
while(listening){
    sleep(5);
    strcat(sent,list2String(&list));
    printf("%s\n", sent);
    for(int i = 0; i<amountInArr;i++){
        send(client[i],(const void*)sent,strlen(sent),0);
    }
    memset(sent,0,1024);
}

问题是 send() 确实有效并且 returns 通过套接字发送的字节数,它连接到写在 Java 上的客户端,但是当我尝试接收套接字上的内容,来自 Java 的 reader.ReadLine() 从来没有捕捉到任何东西,但是如果我这样做,棘手的事情就来了:

void sendThread(){
bool listening = true;
char sent[1024];
while(listening){
    printf("Please enter your message\n");
    fgets(sent,1024,stdin);
    printf("This is the message: %s\n", sent);
    for(int i = 0; i<amountInArr;i++){
        send(client[i],sent,strlen(sent),0);
    }
}

该代码运行完美,它与 Java 通信没有错误,从用户输入发送 char* 和从函数构建它并发送它之间有什么区别?

我用来构建 char* 的代码是下一个:

char* list2String(struct List* lista){
char* charToSend = malloc(sizeof(char)*1024);
char tmp[256];
struct Node* current = lista->head->next->next;
while(current != NULL){
    sprintf(tmp, "%d,%d,%d,%d,%d_", current->data.x,current->data.y,current->data.type,current->data.vel,current->data.dir);
    strcat(charToSend,tmp);
    current = current->next;
}
strcat(charToSend,"@");
sprintf(tmp,"%d_%d@%d_%d_%d@%d_%d_%d_%d@%d,%d_%d,%d_%d,%d",puntuacion,vidas,playerX,playerY,5,bulletPosX,bulletPosY,10,10,1,b1L,2,b2L,3,b3L);
strcat(charToSend,tmp);
memset(tmp,0,256);
return charToSend;

我认为这与格式有关,或者 fgets() 如何管理不同于 list2String 的数据。

如果有人能帮我解决这个问题,我会很高兴,谢谢!

像往常一样。您正在阅读线路,但您没有发送线路。为发送的数据添加行结束符。