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

标签 java c sockets char communication

<分区>

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

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() 确实起作用并返回通过套接字发送的字节数,它连接到用 Java 编写的客户端,但是当我尝试接收套接字上的内容时,reader.ReadLine( ) 来自 Java 从来没有捕捉到任何东西,但如果我这样做,棘手的事情就来了:

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 的数据。

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

最佳答案

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

关于java - 在 C 上工作的 send() 套接字,但从 bufferedReader 读取的 Java 没有得到响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49671372/

相关文章:

c - 带填充的结构的大小

c# - 如何使用C#在Windows中检测范围内的蓝牙激活的笔记本电脑

node.js - ERR_CERT_INVALID : When trying to connect client using ngx-socket-io to nodejs socketio using HTTPS self-assigned certificate

java - Socket-C服务器、Android客户端

Java 垃圾收集器 : top object classes promoted (by size)?

java - 使用 JAXB 解码 XML 时跳过 XML 节点

c - 尝试创建 *.o 时出错

c - 有效地为不同的 Windows 版本使用不同的 API

java - 如何计算从一个方法发送到另一个方法的参数总数

java - 如何找到java和spring的注解的注解处理器