我正在发送一个文本文件 - 客户端 - 服务器将文本分解为每个512字节的数据包,但是一些数据包包含的文本小于最大大小所以在接收每个数据包的服务器端我正在调用malloc()再次构建一个字符串这是一种不好的做法吗?保持一个适合最大长度的工作缓冲区并保持迭代,复制和覆盖它的值更好吗?
好吧@nm这里是代码,这个if是在select()唤醒的for(;;)循环里面
if(nbytes==2) {
packet_size=unpack_short(short_buf);
printf("packet size is %d\n",packet_size);
receive_packet(i,packet_size,&buffer);
printf("packet=%s\n",buffer);
free(buffer);
}
//and here is receive_packet() function
int receive_packet(int fd,int p_len,char **string) {
*string = (char *)malloc(p_len-2); // 2 bytes for saving the length
char *i=*string;
int temp;
int total=0;
int remaining=p_len-2;
while(remaining>0) {
//printf("remaining=%d\n",remaining);
temp = recv(fd,*string,remaining,0);
total+=temp;
remaining=(p_len-2)-total;
(*string) += temp;
}
*string=i;
return 0;
}
Run Code Online (Sandbox Code Playgroud) 我找不到console.log()的历史记录?有没有办法保持或查看以前记录的消息,我的页面不断重新加载和重定向,以便清除日志!
u_char ip_vhl; /* version << 4 | header length >> 2 */
Run Code Online (Sandbox Code Playgroud)
我做不到,这是怎么做到的?你能举例说明如何使用这个字节存储这2个数字,知道每个数字都是4位
struct mgmt_header_t {
u_int16_t fc; /* 2 bytes */
u_int16_t duration; /* 2 bytes */
u_int8_t da[6]; /* 6 bytes */
u_int8_t sa[6]; /* 6 bytes */
u_int8_t bssid[6]; /* 6 bytes */
u_int16_t seq_ctrl; /* 2 bytes */
};
void my_callback(u_char *args, const struct pcap_pkthdr *header, const u_char *packet)
{
//printf("********* New Packet Arrived *********\n");
//printf("Jacked a packet with length [%d]\n", header->len);
struct mgmt_header_t *mac_header = (struct mgmt_header_t *) (packet+24);
if (mac_header->fc > 255 )
printf("comon");
Run Code Online (Sandbox Code Playgroud)
我知道mac_header是在正确的位置因为我从它获取mac地址并且它们是正确的但问题是fc它永远不会大于255所以总是左边的字节为零
更新:
我想我现在得到它感谢你和ott--这里的参考是我的完整例子 …