如何在linux下使用c语言 利用select和pthread编写可以实现多用户的大文件传输的socket通信程序?

我现在已经分别用tcp和udp实现了单个客户端与服务器端的通信,具体是这样的,客户端发送一个文件名到服务器端,服务器端把自己路径下的该文件发送给客户端。但是select和... 我现在已经分别用tcp和udp实现了单个客户端与服务器端的通信,具体是这样的 ,客户端发送一个文件名到服务器端,服务器端把自己路径下的该文件发送给客户端。但是select和pthread不是很会用,请懂的人指点一下。或者有什么书籍或者资料对我说的这个有讲解的话告诉我一下(不要用多进程)解决后继续再加分 展开
 我来答
zhxnlove
2012-09-25 · TA获得超过156个赞
知道小有建树答主
回答量:165
采纳率:0%
帮助的人:82.9万
展开全部
你的意思是单独使用select或者单独使用pthread么?

单独使用select的话,就是server的监听socket监听到来自client的请求,那么就会有一个socket句柄,通过使用select来管理多个句柄,而不需要多个线程thread。

单独使用thread的话,就是server监听到socket请求,那么就会创建一个thread来处理文件的传输的事儿。那么这样的话就会有穿多个文件,就会有多个线程出现。
over_qyl
2012-09-10 · TA获得超过182个赞
知道答主
回答量:96
采纳率:0%
帮助的人:69.5万
展开全部
多个客户端,要有一个服务端实现转发的功能,就行了;一个客户端把文件交给中转程序,由他实现转发,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发送指定文件了。线程很好的一点就是可以共享所有资源,记得要做好互斥,不然就会出异常。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式