① c#socket编程怎么判读客户端与服务器断开连接
使用Socket类中的Poll方法,就可以。
Socket client //假如已经创建好了,连接到服务器端得Socket的客户端对象。
我们只要client.Poll(10,SelectMode.SelectRead)判断就行了。只要返回True是。就可以认为客户端已经断开了。
Poll 方法将会检查 Socket 的状态。指定 selectMode 参数的 SelectMode..::.SelectRead,可确定 Socket 是否为可读。指定 SelectMode..::.SelectWrite,可确定 Socket 是否为可写。使用 SelectMode..::.SelectError 检测错误条件。Poll 将在指定的时段(以 microseconds 为单位)内阻止执行。如果希望无限期的等待响应,则将 microSeconds 设置为一个负整数。如果要检查多个套接字的状态,则不妨使用 Select 方法。
② asp中如何强制断开客户端与服务器的连接
大概还没明白isclientconnected 的意思 他是只读的 而且用法也不是这么写的
If Response.IsClientConnected Then
Response.Flush
Else
Response.End
End If
下面是摘抄的一段
在进入长时运算之前使用Resonse.IsClientConnected
如果用户感到不耐烦,他们可能在ASP页面计算他们的请求之前离开这个页面。如果他们点击刷新或是跳到服务器上的另一个页面,新的请求将位于ASP请求队列尾部,而中断的请求却在请求队列的中部;通常服务器在高负载情况下可能发生这种情况(服务器有很长的请求队列,同时请求次数也很多);而这种情况又使服务器的负载情况变得更加恶劣。如果用户已经断掉连接,没有必要再执行这个ASP页面(尤其当这是一个很慢、很耗资源的页面时);Response.IsClientConnected属性能检查出这种情
况;如果属性返回False,就应该调用Resonse.End来结束剩余的页面。事实上,
IIS 5.0使这种检查规律划--无论什么时候ASP准备执行一个新的请求,他先检查请求队列有多长;如果队列已经超过3秒钟,ASP就会检查客户端是否连接;如果客户端已经断开,ASP立即终止这个请求。可以使用AspQueueConnectionTestTime设置来调整3秒的超时。
如果有一个非常耗时的页面要执行,也可以在页面中检查
Response.IsClientConnected。当响应缓冲打开时,在页面运行中使用
Response.Flush也能给用户操作正在执行的感觉。
注意:在IIS 4.0上,除非你先执行了Response.Write,否则
Response.IsClientConnected的结果有可能不正确;如果响应缓冲已经打开,还必须先执行Response.Flush。在IIS 5.0上,就没有这个必要了,
Response.IsClientConnected工作得很正常。无论任何情况,
Response.IsClientConnected总要消耗一些时间,因此,只应该在执行耗时至少超过500ms的页面中执行。首要原则是,不要在一个紧密的循环中反复调用这个属性。
直接设置10秒自动关闭不就得了
③ 客户端与服务器端的通讯,C++书写步骤。
C++通过socket编程实现服务端与客户端的通讯,代码如下(个人环境下测试正常,如果遇到运行send发送报错,请检查服务器端口是否被占用,调试的时候请先运行服务端程序在运行客服端,一定要加载库函数ws2_32.lib,发送字符时应该多加一个空字符作为结束字符):
服务器端程序:
//Server.cpp:.
#include"winsock2.h"
#pragmacomment(lib,"ws2_32.lib")
#include<iostream>
usingnamespacestd;
intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;
WSADATAwsd;//WSADATA变量
SOCKETsServer;//服务器套接字
SOCKETsClient;//客户端套接字
SOCKADDR_INaddrServ;;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charsendBuf[BUF_SIZE];//返回给客户端得数据
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return1;
}
//创建套接字
sServer=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sServer)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源;
return-1;
}
//服务器套接字地址
addrServ.sin_family=AF_INET;
addrServ.sin_port=htons(4999);
addrServ.sin_addr.s_addr=INADDR_ANY;
//绑定套接字
retVal=bind(sServer,(LPSOCKADDR)&addrServ,sizeof(SOCKADDR_IN));
if(SOCKET_ERROR==retVal)
{
cout<<"bindfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
//开始监听
retVal=listen(sServer,1);
if(SOCKET_ERROR==retVal)
{
cout<<"listenfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
//接受客户端请求
sockaddr_inaddrClient;
intaddrClientlen=sizeof(addrClient);
sClient=accept(sServer,(sockaddrFAR*)&addrClient,&addrClientlen);
if(INVALID_SOCKET==sClient)
{
cout<<"acceptfailed!"<<endl;
closesocket(sServer);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
while(true)
{
//接收客户端数据
ZeroMemory(buf,BUF_SIZE);
retVal=recv(sClient,buf,BUF_SIZE,0);
if(SOCKET_ERROR==retVal)
{
cout<<"recvfailed!"<<endl;
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;
return-1;
}
if(buf[0]=='0')
break;
cout<<"客户端发送的数据:"<<buf<<endl;
cout<<"向客户端发送数据:";
cin>>sendBuf;
send(sClient,sendBuf,strlen(sendBuf),0);
}
//退出
closesocket(sServer);//关闭套接字
closesocket(sClient);//关闭套接字
WSACleanup();//释放套接字资源;
return0;
}
客户端程序:
#include"winsock2.h"
#include<iostream>
#pragmacomment(lib,"ws2_32.lib")
usingnamespacestd;
BOOLRecvLine(SOCKETs,char*buf);//读取一行数据
intmain(intargc,char*argv[])
{
constintBUF_SIZE=64;
WSADATAwsd;//WSADATA变量
SOCKETsHost;//服务器套接字
SOCKADDR_INservAddr;//服务器地址
charbuf[BUF_SIZE];//接收数据缓冲区
charbufRecv[BUF_SIZE];
intretVal;//返回值
//初始化套结字动态库
if(WSAStartup(MAKEWORD(2,2),&wsd)!=0)
{
cout<<"WSAStartupfailed!"<<endl;
return-1;
}
//创建套接字
sHost=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
if(INVALID_SOCKET==sHost)
{
cout<<"socketfailed!"<<endl;
WSACleanup();//释放套接字资源
return-1;
}
//设置服务器地址和端口
servAddr.sin_family=AF_INET;
servAddr.sin_addr.s_addr=inet_addr("127.0.0.1");
servAddr.sin_port=htons((short)4999);
intnServAddlen=sizeof(servAddr);
//连接服务器
retVal=connect(sHost,(LPSOCKADDR)&servAddr,sizeof(servAddr));
if(SOCKET_ERROR==retVal)
{
cout<<"connectfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
while(true)
{
//向服务器发送数据
ZeroMemory(buf,BUF_SIZE);
cout<<"向服务器发送数据:";
cin>>buf;
retVal=send(sHost,buf,strlen(buf),0);
if(SOCKET_ERROR==retVal)
{
cout<<"sendfailed!"<<endl;
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return-1;
}
//RecvLine(sHost,bufRecv);
ZeroMemory(bufRecv,BUF_SIZE);
recv(sHost,bufRecv,BUF_SIZE,0);//接收服务器端的数据,只接收5个字符
cout<<endl<<"从服务器接收数据:"<<bufRecv;
cout<<" ";
}
//退出
closesocket(sHost);//关闭套接字
WSACleanup();//释放套接字资源
return0;
}
④ 上下传客户端断开连接怎么回事
可能是微软帐户有记录你的行为。
客户端断开意思是指客户端已经断开了的意思,也是表明对于当前状态的一种明确的阐述,对这方面通过自己的信息那些观察或者深入一些了解自己,也是有人明确态度的,自己认为当天的这些客户端是已经断开了的意思,所以是产生一些非常大的一些问题,所以是并不能持续进行下去的一种目的。
服务器断开连接,意思是服务器主动释放与客户端建立起的 HTTP 连接。引起服务器断开连接的原因有两种。第一种原因,服务器端维护了一个 keep alive 阈值,如果超出该阈值后客户端仍然没有报文发送往服务器端,该连接就会被服务器重置。第二种原因,客户端实现里主动调用了 close 这个系统调用,此时客户端主动发起连接重置的信号,也会导致服务器端断开连接。
⑤ 如何从SignalR客户端端确定服务器断开连接
1. 集线器有disconnect这将允许您添加一个回调函数,当断线发生:myHub.disconnect(function() {
alert('Server has disconnected');
});
如果你阿仁'枢纽然后为代码将帮助你:$(connection).bind("onDisconnect", function (e, data) {
callback.call(connection);
});
这显示了语法钩到底层连接的触发OnDisconnect事件。
2. 如果集线器那么IDisconnect接口。public class ChatHub : Hub, IDisconnect
{
public void Disconnect()
{
Debug.WriteLine(Context.ConnectionId + " disconnected");
}
}
对持续连接可以覆盖OnDisconnectAsync, (从SignalR维基于)public class MyEndPoint : PersistentConnection
{
protected override Task OnDisconnectAsync(string clientId)
{
return Connection.Broadcast("Client " + clientId + " disconncted");
}
}
3. 开始与SignalR v0.5.1它的工作原理是这样的:$.connection.hub.stateChanged(function (change) {
if (change.newState === $.signalR.connectionState.reconnecting) {
console.log("liveFeed is reconnecting!");
}
else if (change.newState === $.signalR.connectionState.connected) {
console.log("liveFeed is connected!");
}
});
⑥ 怎么断开服务器和客户端的连接
在服务器中,选择注销断开连接。或者在客户端,关闭远程桌面连接窗口,断开服务器连接。
⑦ 如何在客户端上建立一个Socket与服务器端连接,包括连接的函数
进入mysql,创建一个新用户xuys:
格式:grant 权限 on 数据库名.表名 用户@登录主机 identified by "用户密码";
grant select,update,insert,delete on *.* to [email protected] identified by "xuys1234";
查看结果,执行:
use mysql;
select host,user,password from user;
可以看到在user表中已有刚才创建的xuys用户。host字段表示登录的主机,其值可以用IP,也可用主机名,
将host字段的值改为%就表示在任何客户端机器上能以xuys用户登录到mysql服务器,建议在开发时设为%。
update user set host = '%' where user = 'xuys';
2、 ./mysqladmin -uroot -p21century reload
./mysqladmin -uroot -p21century shutdown
3、./mysqld_safe --user-root &
记住:对授权表的任何修改都需要重新reload,即执行第3步。
如果经过以上3个步骤还是无法从客户端连接,请执行以下操作,在mysql数据库的db表中插入一条记录:
use mysql;
insert into db values('192.168.88.234','%','xuys','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
update db set host = '%' where user = 'xuys';
重复执行上面的第2、3步。