【发布时间】:2015-05-29 11:21:18
【问题描述】:
我必须在我的代码中使用先进先出。
我使用 sock 来接受新客户。我为每个客户创建新线程来向他发送和接收消息。
在线程函数中,我使用 fifo 向另一个进程发送和接收消息,这是我的代码:
int s_to_c=open(myfifo1,O_WRONLY);
int c_to_s=open(myfifo2,O_RDONLY);
char echoBuffer[RCVBUFSIZE];
int recvMsgSize;
for(;;)
{
bzero(echoBuffer,RCVBUFSIZE);
read(c_to_s, echoBuffer, RCVBUFSIZE);
write(sock, echoBuffer, strlen(echoBuffer));
bzero(echoBuffer,RCVBUFSIZE);
read(sock, echoBuffer, RCVBUFSIZE);
write(s_to_c,echoBuffer,strlen(echoBuffer));
}
close(c_to_s);
close(s_to_c);
close(sock);
在另一边(另一个进程)我的代码:
int s_to_c=open(myfifo1,O_RDONLY);
int c_to_s=open(myfifo2,O_WRONLY);
char echoBuffer[RCVBUFSIZE];
int recvMsgSize;
for(;;)
{
bzero(echoBuffer,RCVBUFSIZE);
fgets(echoBuffer,RCVBUFSIZE,stdin);
echoBuffer[strlen(echoBuffer)-1]='\0';
write(c_to_s, echoBuffer, strlen(echoBuffer));
bzero(echoBuffer,RCVBUFSIZE);
read(s_to_c, echoBuffer, RCVBUFSIZE);
printf("%s\n", echoBuffer);
}
我的问题是在这个过程中:s_to_c 和 c_to_s 总是取值(3,4)。
所以第一个客户端正确连接发送和接收他的消息。
但是当第二个连接时第一个客户端被禁用。并且第二个客户端的消息发送和接收到两个进程。
我能帮上忙吗?例如我应该使用标签吗??
【问题讨论】:
-
在您的实际代码中,您确实有错误检查吗?并且文件描述符获得什么值是无关紧要的,文件描述符
3(例如)与另一个进程中的文件描述符3不同。你总是得到相同的只是意味着你在打开管道之前没有使用任何其他描述符。 -
对不起,我不明白你的意思。我的代码为第一个客户端正确执行。在服务器中,我打印值:sock=4。 s_to_c=6。 c_to_s=7。在这个过程中,我有这个值:s_to_c=3。 c_to_s=4.
-
就像我说的,描述符数字真的无关紧要,不用担心。
-
我的想法可能比较复杂,不专业。我想在服务器 pc 中为每个新客户端打开新窗口(新进程),所以我必须在客户端和服务器之间使用套接字。以及服务器代码和新终端窗口之间的fifi
标签: c linux sockets named-pipes fifo