怎样将线程里面的数据读出存储在TXT中,再用timer扫描是否有数据

tianlin8 2012-05-26 04:05:59
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;

using System.Net;
using System.Threading;
using System.Net.Sockets;

using System.IO;

namespace FileSocketServer
{
public partial class Form1 : Form
{
Socket ClientSocket;
string txt = "";
public Form1()
{
InitializeComponent();
}

private void Form1_Load(object sender, EventArgs e)
{
//StartReceive();
//开启接收线程
Thread TempThread = new Thread(new ThreadStart(this.StartReceive));
TempThread.Start();


}

#region 功能函数

private void StartReceive()
{
//创建一个网络端点
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, int.Parse("1005"));

//MessageBox.Show(IPAddress.Any);

//创建一个套接字
Socket server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

//绑定套接字到端口
server.Bind(ipep);

//开始侦听(并堵塞该线程)
server.Listen(10);

while (true)
{

try
{
Socket client = server.Accept();
ClientSocket = client;
Thread TempThread = new Thread(new ThreadStart(this.Create));
TempThread.Start();
}
catch (Exception ex)
{
int k = 0;
}
}

}


#endregion

public void Create()
{
Socket client = ClientSocket;
//确认连接
//Socket client = server.Accept();

//获得客户端节点对象
IPEndPoint clientep = (IPEndPoint)client.RemoteEndPoint;



//获得[文件名]
string SendFileName = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("文件名" + SendFileName);


//获得[包的大小]
string bagSize = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("包大小" + bagSize);

//获得[包的总数量]
int bagCount = int.Parse(System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client)));
//MessageBox.Show("包的总数量" + bagCount);

//获得[最后一个包的大小]
string bagLast = System.Text.Encoding.Unicode.GetString(TransferFiles.ReceiveVarData(client));
//MessageBox.Show("最后一个包的大小" + bagLast);

//创建一个新文件
FileStream MyFileStream = new FileStream(SendFileName, FileMode.Create, FileAccess.Write);

//已发送包的个数
int SendedCount = 0;
while (true)
{

byte[] data = TransferFiles.ReceiveVarData(client);
if (data.Length == 0)
{
break;
}
else
{
SendedCount++;
//将接收到的数据包写入到文件流对象
MyFileStream.Write(data, 0, data.Length);
//显示已发送包的个数
}
}
//关闭文件流
MyFileStream.Close();
//关闭套接字
client.Close();
}

private void textBox1_TextChanged(object sender, EventArgs e)
{
static void Main(string[] arg)
{ Text text=new Text();
text.txtManage();
}
class Text
{ public void txtManage()
{ this text=new Thread(new ThreadStart(this.StartReceive));
}

}

}
private void timer1_Tick(object sender, EventArgs e)
{

}
}
}
...全文
107 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
什么叫做“线程里面的数据”呢?

线程不过是执行一个方法而已。所谓数据定义,就跟你编写普通的可执行方法是一样的,没有什么特别的。只不过多个方法可共享的数据(当这些方法被不同线程执行时)有可能并行访问而已。
风之影子 2012-05-27
  • 打赏
  • 举报
回复
把线程里的数据存储在一个变量里,再单独写方法进行写入TXT。至于你的timer来读取TXT我觉的为什么不在数据还没有写入TXT里之前就显示呢?

111,126

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧