<分区>
我有一个特别的问题,这是代码
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 的数据。
如果有人能帮我解决这个问题,我会很高兴,谢谢!