c语言udp数据接收线程,在多线程程序中不接收UDP和输出数据

uint64_t GetTimeStamp()

{

struct timespec start;

if ((clock_gettime(CLOCK_MONOTONIC, &start)) == -1)

{

perror("clock gettime\n");

}

return(start.tv_sec + start.tv_nsec * 1e-9); // seconds

}

const struct sigevent *intHandler(void *arg, int id)

{

start_clock = ClockCycles();

// printf("start clock: %lld\n", start_clock);

return(&event);

}

void *ConfigureISR()

{

// Get IO privilege

ThreadCtl(_NTO_TCTL_IO, 0);

// Setup COID and event

SIGEV_INTR_INIT(&event);

interruptID = InterruptAttach(intrNum, intHandler, NULL, 0, 0);

if (interruptID == -1)

{

fprintf(stderr, "can't attach to IRQ %d\n", intrNum);

perror(NULL);

exit(EXIT_FAILURE);

}

while (loop)

{

InterruptWait(0, NULL);

end_clock = ClockCycles();

InterruptLatency = (uint32) ((end_clock - start_clock) * 1000000/(SYSPAGE_ENTRY(qtime)->cycles_per_sec));

printf("Current Interrupt Latency microseconds: %ld\n", InterruptLatency);

InterruptUnmask(intrNum, interruptID);

measurements[17] = InterruptLatency;

}

return(EXIT_SUCCESS);

}

int CreateSocket()

{

// pthread_attr_t attr;

// Socket creation for UDP

acceptSocket = socket(AF_INET, SOCK_DGRAM, 0);

if (acceptSocket == -1)

{

printf("Failure: socket creation is failed, failure code\n");

return 1;

}

else

{

printf("Socket started!\n");

}

memset(&addr, 0, sizeof(addr));

addr.sin_family = AF_INET;

addr.sin_port = htons(port);

addr.sin_addr.s_addr = htonl(INADDR_ANY);

rc = bind(acceptSocket, (struct sockaddr *)&addr, sizeof(addr));

fcntl(acceptSocket, O_NONBLOCK);

if (rc == -1)

{

printf("Oh dear, something went wrong with bind()! %s\n", strerror(errno));

return -1;

}

else

{

printf("Socket an port %d \n", port);

}

return acceptSocket;

}

int main(int argc, char *argv[])

{

pthread_t thread_id, thread_id1;

Xcp_Initialize();

pthread_create(&thread_id1, NULL, &ConfigureISR, NULL);

if ((sock = CreateSocket()) < 0)

{

perror("Create_socket");

exit(1);

}

if (pthread_create(&thread_id, NULL, &rastertask, NULL))

{

perror("pthread_create");

exit(1);

}

do

{

socklen_t len;

len = sizeof(client);

printf("NEW DATA ARRIVED\n");

// non blocking mode : MSG_DONTWAIT

rc = recvfrom(sock, buf, 256, 0, (struct sockaddr *) &client, &len);

Receive = GetTimeStamp();

receiveTime = (uint32) (Receive/1000000);

printf("Receive time: %lu\n", receiveTime);

// printf("RECEIVE from Time in microseconds: %lu\n", ReceiveTimestamp);

// measurements[19] = ReceiveTimestamp;

if (rc == 0)

{

printf("Server has no connection..\n");

loop = 0;

break;

}

if (rc == -1)

{

if (errno == SIGINT)

continue;

printf("Oh dear, something went wrong with read()! s\n", strerror(errno));

loop = 0;

break;

}

XcpIp_RxCallback((uint16) rc, (uint8 *) buf, (uint16) port);

} while (1);

close(sock);

return 0;

}

以上是服务器代码,它通过ip地址和端口号接收数据。在多线程程序中不接收UDP和输出数据

稍后将数据发送回客户端。我正在接收数据,但在收到数据后,获取时间戳(您可以在上面的代码中看到:Send= GetTimeStamp())。

为什么不打印任何东西?我通过套接字接收数据,然后我给printf("new data arrived\n");,然后它也不打印。我也没有收到任何时间!有人能告诉我可能是什么原因吗?

+0

接收到主函数中的数据后:它不是按照接收到的数据进行打印。奇怪的东西:( –

+0

*格式*您的代码(使用正确的缩进),*删除*不相关的部分,拿出一个最小的例子。 –

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值