有关stocket通讯,服务端如何持续接收客户端命令并返回数据给客户端问题
我现在做一个stocket程序,客户端和服务端连接成功后,客户端做数据增删查改,每次给服务端发送一条sql语句,服务端就接收到后进行数据库处理返回给客户端一个压缩后的Dataset,现在的问题是服务端现在这能接收到一次客户端命令,请各位给我点意见如何进行持续的接收,在不用到线程的情况下。现在我贴出服务端的代码:
int port = 50000;
string host = "192.168.1.145";
//创建终结点
IPAddress ip = IPAddress.Parse(host);//
IPEndPoint ipe = new IPEndPoint(ip,port);
//创建监听socket
Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
s.Bind(ipe);
s.Listen(0);
MesServer.AppendText("等待客户端连接...\n");
//s.Connect(ipe);
//为接受客户端连接,建立新的socket
Socket client = s.Accept();
MesServer.AppendText("已与客户端建立连接\n");
//接受从客户端发送的消息
string reClient = "";
byte[] recvBytes = new byte[1024];
int bytes;
bytes = client.Receive(recvBytes, recvBytes.Length, 0);
reClient += Encoding.ASCII.GetString(recvBytes, 0, bytes);
MesServer.AppendText("get client message:" + reClient + "\n");
//根据发送过来的SQL语句返回数据流给客户端
DataSet ds = ToClientDS(reClient);
//压缩数据集,并发送到客户端
byte[] b = ObjectZip.CompressDataSet(ds);
client.Send(b, b.Length, 0);
//接收服务端返回的数据集
DataSet Clientds = new DataSet();
byte[] recvBytes = new byte[1024];
int bytes;
bytes = c.Receive(recvBytes, recvBytes.Length, 0);//接收服务端的数据流,并存入缓冲区
//Stream stream = new MemoryStream(recvBytes);
Clientds = ObjectZip.DecompressDataSet(recvBytes);
dataGridView1.DataSource = Clientds.Tables[0];
c.close();
}
catch (Exception ex)
{
MesClient.AppendText("Exception:" + ex.Message + "\n");
}
}
------解决方案--------------------
持续的接收就是无限循环,或者用信号量
------解决方案--------------------WHILE(TRUE)
{
Socket client = s.Accept();
。。。。
}