timer1_Tick中出现 “当前上下文中不存在名称client”错误
源码:namespace 控件刷新
{
public partial class Form1 : Form
{
PerformanceCounter pc = new PerformanceCounter("Processor", "% Processor Time", "_Total");
int recv; // 用于表示客户端发送的信息长度
byte[] data = new byte[1024]; // 用于缓存客户端所发送的信息,通过socket传递的信息必须为字节数组
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); // 本机预使用的IP和端口
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
public Form1()
{
InitializeComponent();
IPHostEntry ipe = Dns.GetHostEntry(Dns.GetHostName());
IPAddress ipa = ipe.AddressList[1];
newsock.Bind(ipep); // 绑定
newsock.Listen(10); // 监听
Socket client = newsock.Accept(); // 当有可用的客户端连接尝试时执行,并返回一个新的socket,用于与客户端之间的通信
label4.Text =" waiting for a client ";
}
private void timer1_Tick(object sender, EventArgs e)
{
string cpuLoad = pc.NextValue().ToString("0.00");
label1.Text = cpuLoad;
Socket newsock = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
IPEndPoint ipep = new IPEndPoint(IPAddress.Any, 9050); // 本机预使用的IP和端口
IPEndPoint clientip = (IPEndPoint)client.RemoteEndPoint;
Console.WriteLine(" connect with client: " + clientip.Address + " at port: " + clientip.Port);
string welcome = " welcome here! ";
data = Encoding.ASCII.GetBytes(welcome);
client.Send(data, data.Length, SocketFlags.None); // 发送信息
// 用死循环来不断的从客户端获取信息
data = new byte[1024];
recv = client.Receive(data);
label1.Text = Encoding.ASCII.GetString(data, 0, recv);
string welcomee = " welcome here! ";
data = Encoding.ASCII.GetBytes(welcomee);
client.Send(data, data.Length, SocketFlags.None); // 发送信息
//Console.WriteLine(" Disconnected from " + clientip.Address);
//client.Close();
//newsock.Close();
}
private void label2_Click(object sender, EventArgs e)
{
}
private void label1_Click(object sender, EventArgs e)
{
}
private void label3_Click(object sender, EventArgs e)
{
}
}
}
那个赋值语句还是只能运行一次,只能放在timer外面,怎么办?? --------------------编程问答-------------------- 吧那句放到timer中去 --------------------编程问答-------------------- 但是那个是socket链接的语句,只能连接一次就够了,不能放到timer中啊 --------------------编程问答-------------------- 这个不能用timer吧?你的accept是同步阴塞的,timer好像是多线程的运行, 也就是异步的。
如果没有Socket进来,那么client就没有啊, 你在Timer_tick里肯定取不到值
这两个不找搭边,你在Tick事件里加判断吧, 如果client可用{........}else{.........} --------------------编程问答-------------------- 换句话说,如果没有请求进来,你的主线程会停在client = socket.Accept()那句话上,但time的子线程仍然会执行tick事件,这时候client对象是没有的
补充:.NET技术 , C#