日期:2014-05-18  浏览次数:20841 次

问几个关于网络编程的小问题解决就给分
代码:
//开始监听
TCPListener.Start();
//循环
while( true )
{
//接收客户端的一个连接请求,返回一个套接字
s = TCPListener.AcceptSocket();

/* NOTE: Would be using System.Threading.ThreadPool(s) but they are not supported on 9x systems */
//创建一个线程,处理当前连接
Thread client = new Thread( new ThreadStart( ServeConnection ) );
//线程开始运行
client.Start();

}

1 传递文件的时候限速和提速怎么做?用timer来停顿控制?

2 监听的时候,如果有新连接才打开处理的线程?这个是系统处理?比如 TCPListener.AcceptSocket();这个如果没有探测到则一直不相应?

3 线程函数ServeConnection处理了一遍退出后,如果下次再来,触发了AcceptSocket,后面新建的线程怎么判断数据来源?比如说,再次进入的ServeConnection 怎么判断是a机器还是b机器的连接?



------解决方案--------------------
1:每个请求,使用一个线程处理,线程可以放在线程池里运行
2:传递文件的时候限速和提速 应该在线程里控制,你在传输文件时,要拆包,可以控制发包的频率,来控制速度
3:SOCK里有请求方的IP,但一般是让对方通过连接发一个自己的标记过来,你解析这个标识知道是谁
------解决方案--------------------
帮顶
------解决方案--------------------
看你上面的代码应该只能有一个连接。你如果想控制每一个线程建议你自定义线程池。但这样相对占用资源