C#socket异步服务器发送后接收数据 长连接
privatestaticvoidRecVing(IAsyncResultResult){//通过result获取socket。在这个socket上你启动了BeginAc...
private static void RecVing(IAsyncResult Result)
{
//通过 result 获取socket。在这个socket上你启动了BeginAccept操作
Socket socket = Result.AsyncState as Socket;
Socket Res_soc = null; //这个是与当前客户端连接的Socket
try
{
// 通过EndAccept,获取与当前客户端连接的Socket
Res_soc = socket.EndAccept(Result);
Console.WriteLine("连接成功!");
//创建包头缓冲区
byte[] bytes = new byte[80];
//接收包头 将接收到的信息放入缓冲区内
Res_soc.Receive(bytes);
//处理接收数据包包头信息的函数
byte[] byteData = business.GetMsgHeadSt(bytes, Res_soc);
//返回客户端信息
Send(byteData, Res_soc);
}
catch
{
// 发生异常时,释放Res_soc
if (Res_soc != null) Res_soc = null;
}
finally //利用finally 确保无论发生什么异常都能够让socket继续接收连接
{
//继续异步等待连接
socket.BeginAccept(new AsyncCallback(RecVing), socket);
}
}
服务器端通过异步收发数据包,我发送出去后在接收的数据包和第一次收到的数据包一样,是什么原因?
RecVing方法执行完是不是socket就断开了?怎么样执行长连接,一个socket连接去发送和接收数据呢? 展开
{
//通过 result 获取socket。在这个socket上你启动了BeginAccept操作
Socket socket = Result.AsyncState as Socket;
Socket Res_soc = null; //这个是与当前客户端连接的Socket
try
{
// 通过EndAccept,获取与当前客户端连接的Socket
Res_soc = socket.EndAccept(Result);
Console.WriteLine("连接成功!");
//创建包头缓冲区
byte[] bytes = new byte[80];
//接收包头 将接收到的信息放入缓冲区内
Res_soc.Receive(bytes);
//处理接收数据包包头信息的函数
byte[] byteData = business.GetMsgHeadSt(bytes, Res_soc);
//返回客户端信息
Send(byteData, Res_soc);
}
catch
{
// 发生异常时,释放Res_soc
if (Res_soc != null) Res_soc = null;
}
finally //利用finally 确保无论发生什么异常都能够让socket继续接收连接
{
//继续异步等待连接
socket.BeginAccept(new AsyncCallback(RecVing), socket);
}
}
服务器端通过异步收发数据包,我发送出去后在接收的数据包和第一次收到的数据包一样,是什么原因?
RecVing方法执行完是不是socket就断开了?怎么样执行长连接,一个socket连接去发送和接收数据呢? 展开
3个回答
展开全部
我刚刚做了个winSock与采集器的通讯和继电器板卡的通讯,皆成功.注意点:IP地址,端口,协议这三样要准确,发送有二种方式:字符串,二进制串,接收也要对应的.有的通讯卡,返回中包含发送的内容是正常的,也有的板卡无返回的.
更多追问追答
追问
我是想问的在不断开socket连接怎么继续接收客户端传过来的数据
追答
在连接状态下发送与接收数据,你是要在不发送数据也要接收数据,这应该关注server---client的概念,以client定时地发送给server端.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询