用C#写了个Windows服务程序,监听某个端口是否有数据传来。但是为什么只能监听到第一次数据流?

程序只能监听到第一次上传的数据流,以后就监听不到了,下面是主要代码。//构造函数publicService1(){InitializeComponent();//测试代码... 程序只能监听到第一次上传的数据流,以后就监听不到了,下面是主要代码。
// 构造函数
public Service1()
{
InitializeComponent();
// 测试代码
StreamWriter sw = new StreamWriter("D:/aaa.txt", true);
sw.WriteLine("aaaa");
sw.Close();
// 创建目录
if (!Directory.Exists(filePath))
{
Directory.CreateDirectory(filePath);
}
if (!Directory.Exists(logPath))
{
Directory.CreateDirectory(logPath);
}
// 得到IP地址和端口号
GetIPAndPort();
}

protected override void OnStart(string[] args)
{
// 开始监听
sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPAddress ip = IPAddress.Parse(IP);
IPEndPoint point = new IPEndPoint(ip, port);
sck.Bind(point);
sck.Listen(10);
// 起一个线程,指向要处理的函数
MainThread = new Thread(new ThreadStart(GetByteToRAR));
// 开启监听
if (!string.IsNullOrEmpty(IP) && port != 0)
{
MainThread.Start();
}
}
private void GetByteToRAR()
{
// 一直监听,直到有数据过来
while (true)
{
try
{
// 测试代码
StreamWriter sw = new StreamWriter("D:/aaa.txt", true);
sw.WriteLine("bbb");
sw.Close();
accSck = sck.Accept();
// 字符流暂时限制在10M
byte[] buffer = new byte[1024 * 1024 * 10];
accSck.Receive(buffer);
// 将字符流转换成文件
// someCode
// 解压文件
UnRAR(fileName);
accSck.Close();
}
catch (Exception ex)
{
throw ex;
}
}
展开
 我来答
shuibiyy
2014-09-23 · TA获得超过1724个赞
知道小有建树答主
回答量:446
采纳率:100%
帮助的人:143万
展开全部
逻辑不正确 
accSck = sck.Accept();//是一个阻塞。当处理完一次后一直处于等待下一个连接。
正确流程写法:
           // 开始监听          
     sck = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);         
        IPAddress ip = IPAddress.Parse(IP);   
        IPEndPoint point = new IPEndPoint(ip, port);    
          sck.Bind(point);    
          sck.Listen(10);
        while(true)
{
accSck = sck.Accept();
thread th=new Thread(word);
 th.isbackground=true;
th.start(accsck);
}
 private void work(object socket)
{
Socket  accSck=(Socket)socket;
byte[] buffer = new byte[1024 * 1024 * 10];
whil(true)
{
try{            
        accSck.Receive(buffer);                    // 将字符流转换成文件                 nRAR(fileName);
}catch
{
   accSck.Close();  
}
}                 
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式