我试图断开客户端与服务器的连接,但服务器仍然将其视为已连接.我无法找到解决方案,关闭,断开和关闭所有不工作.
我与客户端断开连接并检查服务器的一些代码:
客户:
private void btnDisconnect_Click(object sender, EventArgs e)
{
connTemp.Client.Shutdown(SocketShutdown.Both);
connTemp.Client.Disconnect(false);
connTemp.GetStream().Close();
connTemp.Close();
}
Run Code Online (Sandbox Code Playgroud)
服务器:
while (client != null && client.Connected)
{
NetworkStream stream = client.GetStream();
data = null;
try
{
if (stream.DataAvailable)
{
data = ReadStringFromClient(client, stream);
WriteToConsole("Received Command: " + data);
}
} // So on and so on...
Run Code Online (Sandbox Code Playgroud)
代码中还有更多的写入和读取.
希望你们都能提供帮助.
更新:我甚至尝试通过ref传递TCP客户端,假设存在范围问题和client.Connected即使在读取后仍然为真.出了什么问题?
第二次更新!!:
这是解决方案.先查看并确定是否已连接.
if (client.Client.Poll(0, SelectMode.SelectRead))
{
byte[] checkConn = new byte[1];
if (client.Client.Receive(checkConn, SocketFlags.Peek) == 0)
{
throw new IOException();
}
}
Run Code Online (Sandbox Code Playgroud) 当使用socket.io(node.js)触发套接字断开连接事件时,套接字的数据仍可用多长时间?
如果我有一个异步返回数据的商店(如redis),那么仍然可以安全地执行查找吗?
我需要获取套接字的所有数据,以便在断开连接时保存套接字的状态.
非常感谢.
我的perl脚本很慢但有效.我正在考虑抛弃它并构建一个具有适当绑定等的真正的DB2应用程序; 然而,与此同时,我希望这可以作为占位符.
我查看了这个文档并提到:
$dbh->disconnect();
Run Code Online (Sandbox Code Playgroud)
但是我无法使用它,因为它会抛出此错误.
无法在./ProgramTree.pl第119行通过包"dbh"(可能加载"dbh"?)找到对象方法"disconnect".
我知道我的临时应用程序正在泄漏并且正在增长,因为它以递归方式打开数据库句柄.我错过了什么基本的东西?
我正在将一个应用程序从GameKit转换为Multipeer Connectivity,似乎找不到允许浏览器设备从会话中断开另一个对等体的方法.使用GKSession,我们可以使用disconnectPeerFromAllPeers:断开单个对等体与会话的连接,但我在MPC中找不到类似的东西.当然,MPC确实有disconnect:方法,但这会使本地对等体退出会话......不是我想要的.
我发现最接近的是:cancelConnectPeer:但这似乎更侧重于取消连接尝试...而不是发布连接.
如果有可能与MPC一起使用,任何人都知道如何做到这一点?
谢谢!
我正在读这个问题:试图检测浏览器关闭事件
但它不够全面,或者至少我不确定它,我需要检测用户何时离开网站,这可能是:
我相信还有更多的案例.
这可能需要由服务器管理,而不是在极端情况下不会被触发的某些javascript事件.
在这种情况下可以使用什么想法?
我有一个 Perl 脚本,它使用不同的连接驱动程序连接到许多数据库。
如果有任何活动会话,有什么办法可以最终编写一个断开连接函数来断开连接吗?
例子 :
connection 1: $dbh->oracle;
connection 2: $dbh->sql
Run Code Online (Sandbox Code Playgroud)
我可以为两个数据库设置一个通用的断开连接字符串吗?
自从我开始使用 django-channels 已经 1 个月了,现在我觉得我没有正确断开 websockets。当我断开连接时,如果没有人在那里,我想完全摧毁该组,并且它应该没有存在的迹象。当我拒绝连接时,我提出 channels.exceptions.DenyConnection 或发送 {'accepted': 'False'} 我只是想知道这是否是我提到的事情的正确方式。
我有用erlang和命令处理程序编写的tcp服务器.如果客户端连接到我的服务器,然后关闭如何捕获网络断开连接?
我的应用程序可以从memo1中的每个URL下载一张图片.它使用idhttp.get并有一个跳过按钮.跳过之后下载下一张图片.
Q1:你有代码放入析构函数,"终止"和"等待"的代码是什么? 我在另一个网站上发现了这个:
destructor thread.destroy;
begin
try
Terminate;
If HTTP.Connected then HTTP.Disconnect;
finally
WaitFor;
FreeAndNil(HTTP);
end;
inherited;
end;
Run Code Online (Sandbox Code Playgroud)
Q2:如何调用析构函数并使其工作?
问题3:您是否有提示(特别是安全问题)和其他代码行?
我的申请代码:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdTCPConnection,
IdTCPClient, IdHTTP;
type
thread = class
public
Constructor Create; overload;
Destructor Destroy; override;
end;
TForm1 = class(TForm)
IdHTTP1: TIdHTTP;
Memo1: TMemo;
Memo2: TMemo;
Memo3: TMemo;
startbutton: TButton;
skipbutton: TButton;
procedure startbuttonClick(Sender: TObject);
procedure skipbuttonClick(Sender: TObject);
procedure IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: …Run Code Online (Sandbox Code Playgroud) 我正在使用node.js作为游戏服务器.
这是我的服务器脚本
var net = require('net');
var http = require('http');
var host = '192.168.1.77';
var portNum = 12345;//
function policy()
{
var xml = '<?xml version="1.0"?>\n<!DOCTYPE cross-domain-policy SYSTEM' +
'"http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">\n<cross-domain-policy>\n';
xml += '<allow-access-from domain="*" to-ports="*"/>\n';
xml += '</cross-domain-policy>\n\0' + "\0";
return xml;
}
var server = net.createServer(function (stream)
{
stream.setEncoding('utf8');
stream.on('data', function (data) {
if (data == '<policy-file-request/>\0')
{
var x = policy();
stream.write(x);
var server_date = new Date();
var serv_sec = server_date.getSeconds();
return;
}
var comm = JSON.parse(data);
if …Run Code Online (Sandbox Code Playgroud)