I / O通信从客户端到服务器程序进行读写

时间:2016-04-22 15:12:59

标签: c server client file-descriptor readblock

所以我正在玩端口和客户端/服务器通信的想法。

我有一个server.c程序,可以打开一个端口,打开一个监听描述符,并在收到连接后,派一个孩子来处理与连接客户端的通信。我有一个client.c程序,它接受5个命令行参数。基本上前3个参数是要发送到服务器的练习字符串,第4个是主机名,第5个是端口号。

到目前为止连接这两个工作正常,但是,当客户端尝试将3个不同的字符串(argv [1],argv [2]和argv [3])写入server.c时,server.c似乎只有能够读取第一个然后它似乎被卡住并且不继续使用附加读取,即使客户端将完成将所有字符串写入通信文件描述符。我已经被困4个多小时,试图找出应该是一个简单的练习程序来更好地学习服务器和客户端。我不想再迷路了,所以我已经这样了,我希望有人可以给我任何关于如何处理这个问题或者我做错了什么的建议。

Client.c

libavformat

Server.c

muxing.c

2 个答案:

答案 0 :(得分:0)

注意:无法保证readwrite将从/向文件描述符读取或写入所有数据,并且不保证客户端正在写入的数据块将被读入在服务器上采用相同的方式。

您必须确保检查写入的字节并继续将数据写入fd,直到您将其全部写入为止。在阅读时,您必须让客户端发送某种描述预期数据量的头数据,或者在您的情况下,您可以一次读取1个字节并查找'\0'个字符,表示字符串的结尾。

由于MAXSZ可能比您发送的字符串大,服务器可能会立即将所有字符串读入第一个缓冲区,然后在后续读取时阻塞。

答案 1 :(得分:0)

分叉的第一个子节点使用r_close(listenfd);

关闭侦听器

然后,当客户端发送argv[1]没有可用的监听器时,我认为,由于u_accept(listenfd, client, MAX_CANON)无效,listenfd会返回错误。