c# Socket客户端 定时发送数据并接收返回的问题
我的客户端每天要定时向服务器请求数据
开始很简单的功能,两个按钮,一个连接服务器一个发送,一个接收框,一个输入框发送
Socket clientSocket;
Thread clientThread;
public Client()
{
InitializeComponent();
}
private void ConnectToServer()
{
byte[] data = new byte[1024];
string vIp = "192.168.1.20";
int vPort = 8888;
//创建一个套接字
IPEndPoint ipep = new IPEndPoint(IPAddress.Parse(vIp), vPort);
clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
//将套接字与远程服务器地址相连
try
{
clientSocket.Connect(ipep);
}
catch (SocketException ex)
{
MessageBox.Show("connect error: " + ex.Message);
return;
}
while (true)
{
//接收服务器信息
int bufLen = 0;
try
{
bufLen = clientSocket.Available;
clientSocket.Receive(data, 0, bufLen, SocketFlags.None);
if (bufLen == 0)
{
continue;
}
}
catch (Exception ex)
{
MessageBox.Show("Receive Error:" + ex.Message);
return;
}
string clientcommand = System.Text.Encoding.ASCII.GetString(data).Substring(0, bufLen);
//lstClient是我的接收到的数据显示框
lstClient.Items.Add(clientcommand);
}
}
//连接按钮
private void btnConnect_Click(object sender, EventArgs e)
{
clientThread = new Thread(new ThreadStart(ConnectToServer));
clientThread.Start();
}
//发送按钮事件
private void btnSend_Click(object sender, EventArgs e)
{
//向服务器发送信息
//txtClient 是输入要发送消息的文本框
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(txtClient.Text);
clientSocket.Send(data, data.Length, SocketFlags.None);
}
这个是手动的功能,我加了个Timer,间隔1分钟,就自动请求一次数据
private void timer1_Tick(object sender, EventArgs e)
{
//向服务器发送信息
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(“要定时发送的请求”);
clientSocket.Send(data, data.Length, SocketFlags.None);
}
然后把发送按钮屏蔽掉,程序跑起来以后,手动点连接按钮,也没问题,会自动收到数据
但是当我把连接按钮里面的语句放到Timer里面
private void timer1_Tick(object sender, EventArgs e)
{
clientThread = new Thread(new ThreadStart(ConnectToServer));
clientThread.Start();
//向服务器发送信息
byte[] data = new byte[1024];
data = Encoding.ASCII.GetBytes(“要定时发送的请求”);
clientSocket.Send(data, data.Length, SocketFlags.None);
}
先自动连接服务器,然后再自动发送请求
然后在接收数据的里面加了
clientSocket.Shutdown(SocketShutdown.Both);
clientSocket.Close();
接收数据完成以后关闭连接,下次timer时间到了再打开连接,这么做就出现问题了
发送数据成功,但是接收不到返回的数据。
然后我又把
clientThread = new Thread(new ThreadStart(ConnectToServer));
clientThread.Start();
这两句拿到Form_Load里面,打开界面就加载了,然后等到了时间,直接发送数据,等着接收,成功了,但是我又改了一下,再改回来,又接收不到数据了
各位大神,怎么整这个?
各种改,改出来错:
在一个已经连接的套接字上做了一个连接请求。
由于套接 字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
然后我加了clientSocket.isConnected 没连就再连一次,还是报错
大神们帮帮忙啊,还在加班,下不了班了。。。