[UE4]FSocket client客户端如何检测与server服务端断开链接

目前FScoket无法做到感知服务端关闭tcp链接,要做到只能通过两种其他方式:

1,使用BSD socket(建议使用non-blocking mode,因为这样方便终止接收线程);

2,客户端发送心跳包给服务端,如果没有得到回应则认为关闭。

下面方法仅适用于客户端自己关闭连接,如果是服务端关闭是没法感知的

if (Socket->GetConnectionState() != SCS_Connected)
{
	// Socket disconnected 
}
else
{
	if (Socket->HasPendingData(Size))
	{
		Socket->Recv(Data, MaxBuffer, BytesRead);
	}	
}

之前在answerhub上提了一个bug说明这个情况,但是得到的回复是让我仔细检查自己的代码,说FSocket就是基于BSD实现的, 本来想直接贴代码给他解释下的,但是感觉麻烦不想折腾。

参考:

FSocket - How to handle client disconnection

https://answers.unrealengine.com/questions/265930/fsocket-how-to-handle-client-disconnection.html

猜你喜欢

转载自aigo.iteye.com/blog/2299948