在 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 的数据。
如果有人能帮我解决这个问题,我会很高兴,谢谢!
像往常一样。您正在阅读线路,但您没有发送线路。为发送的数据添加行结束符。
我有一个特别的问题,这是代码
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 的数据。
如果有人能帮我解决这个问题,我会很高兴,谢谢!
像往常一样。您正在阅读线路,但您没有发送线路。为发送的数据添加行结束符。