如何在linux下使用c语言 利用select和pthread编写可以实现多用户的大文件传输的socket通信程序?
我现在已经分别用tcp和udp实现了单个客户端与服务器端的通信,具体是这样的,客户端发送一个文件名到服务器端,服务器端把自己路径下的该文件发送给客户端。但是select和...
我现在已经分别用tcp和udp实现了单个客户端与服务器端的通信,具体是这样的 ,客户端发送一个文件名到服务器端,服务器端把自己路径下的该文件发送给客户端。但是select和pthread不是很会用,请懂的人指点一下。或者有什么书籍或者资料对我说的这个有讲解的话告诉我一下(不要用多进程)解决后继续再加分
展开
2个回答
展开全部
多个客户端,要有一个服务端实现转发的功能,就行了;一个客户端把文件交给中转程序,由他实现转发,select系统调用是用来让我们的程序监视多个文件句柄(file descriptor)的状态变化的。程序会停在select这里等待,直到被监视的文件句柄有某一个或多个发生了状态改变。 文件在句柄在Linux里很多,如果你man某个函数,在函数返回值部分说到成功后有一个文件句柄被创建的都是的,如man socket可以看到“On success, a file descriptor for the new socket is returned.”而man 2 open可以看到“open() and creat() return the new file descriptor”,其实文件句柄就是一个整数,看socket函数的声明就明白了。
追问
我要实现的功能是服务器发文件给客户端,只不过发的文件是由客户端指定,不需要转发吧。你说的select那些其实我都明白,就是不知道怎么配合多线程实现这个功能
追答
你可以先让客户端通过socket发一个请求给服务器,在请求中附带文件名,然后服务器肯定是处于监听状态。当他监听的端口上有信息后,就创建一个新的线程处理该请求。就可以通过select发送指定文件了。线程很好的一点就是可以共享所有资源,记得要做好互斥,不然就会出异常。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询