⑴ vb.net中关于 socket的连接服务器失败问题! 怎么处理连接失败
用 try-catch 结构,捕获 SocketException,示例:
Try
//可能产生错误的代码
CatchexAsSocketException
MessageBox.Show("连接失败,原因是:"&ex.Message)
EndTry
P.S. 好久不写 VB.NET 的了,这个是根据 C# 和记忆中的样子写的,题主看明白思路就好。
⑵ linux下如何判断socket是否有效
tcp连接本身就是有状态的...何必要依靠发送数据来确定...
第一,不管服务器还是客户端断开连接,另一端必定会收到socket连接断开的异常
第二,在socket发送数据前,可以检查 socket.isConnected() 来判断连接是否存在
第三,假设服务器没有开启,connect动作就不应该会执行下去,直接就抛错了
⑶ 关于socket通讯的,为什么总连接失败,code=5
1 查看报错信息,就是willdis,diddis给的错误信息,确定是你还是服务端的问题
2 如果主机服务和端口都没问题,有可能是你的局域网的问题(用ip就不用考虑dns的问题了),是不是路由器(硬件路由器以及你设备的防火墙)有什么限制之类的
⑷ c#socket异步连接后怎样判断连接是否成功
private int connToServer(string hostip, int hostport,int ctimeout) { IPEndPoint remoteEp = new IPEndPoint(IPAddress.Parse(hostip),hostport); try { connDone.Reset();
//开始连接 cliSock.BeginConnect(remoteEp, new AsyncCallback(connCallBack), cliSock); connDone.WaitOne(ctimeout, false); if (!cliSock.Connected) { //连接超时 return CONNTIMEOUT; } //连接成功 return 0; } catch (SocketException ex) { //连接失败 cliSock.Close(); return CONNTIMEOUT; } catch (Exception ex) { //连接失败 cliSock.Close(); return CONNTIMEOUT; } } private void connCallBack(IAsyncResult ar) { Socket s = (Socket)ar.AsyncState; try { s.EndConnect(ar); isConnected = s.Connected; } catch (Exception ex) { isConnected = false; //发生错误 return; } finally { connDone.Set(); } }
⑸ 常见Socket连接错误及原因有哪些
socketerrorcode:11001,socketerrorinfo:不知道这样的主机。 表示您的计算机无法连上服务器,请检查您的Proxy设定以及Proxy相关账号,或暂时取消您防毒软件的“个人防火墙”。 2、出现网络联机错误Socketerror#11004 socketerrorcode:11004,socketerrorinfo:请求的名称有效,但是找不到请求的类型的数据。 应该是网络联机状态问题,请用户检查网络联机是否正常。 3、出现网络联机错误Socketerror#10060 Connection Timed Out socketerrorcode:10060,socketerrorinfo:由于连接方在一段时间后没有正确答复或连接的主机没有反应,连接尝试失败。 表示您与服务器发生联机逾时错误,请检查您的Proxy相关设定,以及Proxy Server是否已将SSL 443 port打开。 4、出现网络联机错误Socketerror#10061 socketerrorcode:10061,socketerrorinfo:由于目标计算机积极拒绝,无法连接。
⑹ 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 方法。
⑺ 如何判断socket客户端连接断开
你可以根据服务器收到的数据的长度来判断,如果服务器收到的数据长度是0,那么意味着你的客户端程序已经断开了连接。从tcp/ip协议栈的角度来说,就是客户端程序关闭了自己写的这一半连接,向服务器发出了一个fin。这涉及到tcp的状态迁移,关于这方面的知识,建议你看一下richard
stevens先生的《tcp/ip
详解》卷一和《unix网络编程》卷一,上面有详细的解释。
关于你的第二个问题,建议你仔细看一下自己的服务器程序代码。服务器程序首先要建立一个监听socket,当有客户端连接上来时,服务器会在一个新socket上接受客户端连接。所以并不存在“乱”的问题。关于这个问题同样推荐你看上面的两本关于网络编程的经典着作。
⑻ php 的 socket如何判断连接已经断开
当连接断开时,读写socket的函数会失败。如socket_read()在读取失败时布尔值false。这时可以调用socket_last_error()和socket_strerror()函数得到错误代码和错误信息。可以根据这个判断失败原因是否为连接断开。
望采纳~~
⑼ 异步模式的socket在connect之后怎么知道connect成功还是失败
m_strServerIP = strServerIP;
m_nPort = nPort;
while( true )
{
// 创建套接字
m_socket = socket(AF_INET,SOCK_STREAM,0);
if( m_socket == INVALID_SOCKET )
break;
// 设置为非阻塞模式
DWORD ul = 1;
if( 0 != ioctlsocket( m_socket, FIONBIO, &ul) )
break;
// 将UNICODE的IP地址转换为多字节字符的IP地址
char szServerIP[16] = { 0 };
if( WideCharToMultiByte( CP_ACP,0,m_strServerIP,m_strServerIP.GetLength(),szServerIP,sizeof(szServerIP),NULL,NULL ) == 0 )
break;
// 连接指定的IP地址和端口
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(m_nPort);
sin.sin_addr.s_addr = inet_addr( szServerIP );
if( ! ( SOCKET_ERROR == connect( m_socket, (SOCKADDR *)&sin, sizeof(sin)) && WSAGetLastError() == WSAEWOULDBLOCK ) )
break;
// 异步connect不会等待就直接返回了,用select的方式来判断connect是否成功,select会阻塞,只到connect连接成功或失败后select才返回
fd_set fs_read;
FD_ZERO( &fs_read );
FD_SET( m_socket,&fs_read );
fd_set fs_write;
fs_write.fd_count = 1;
fs_write.fd_array[0] = m_socket;
fd_set fs_error;
fs_error.fd_count = 1;
fs_error.fd_array[0] = m_socket;
int ret = select( 0,&fs_read,&fs_write,&fs_error,NULL );
if( ret == SOCKET_ERROR )
break;
// 判断socket句柄是否可写
if( !FD_ISSET( m_socket,&fs_write ) )
break;
int optval = -1;
int optlen = sizeof(optval);
ret = getsockopt( m_socket,SOL_SOCKET,SO_ERROR,(char*)(&optval),&optlen );
if( ret != 0 || optval != 0)
break;
// 直到这里connect才是真正成功
// 创建监听线程收到消息的事件句柄
m_wsaEvent = WSACreateEvent();
if( m_wsaEvent == WSA_INVALID_EVENT )
break;
// 给监听线程的消息到达事件句柄配置要通知的事件类型
if( WSAEventSelect( m_socket,m_wsaEvent,FD_READ|FD_WRITE|FD_CONNECT|FD_CLOSE ) != 0 )
break;
// 创建通知监听线程退出的事件句柄
m_wsaClose = WSACreateEvent();
if( m_wsaClose == WSA_INVALID_EVENT )
break;
// 创建消息事件监听线程
DWORD dwThreadId;
m_hThreadEvent = CreateThread( NULL, 0, ThreadProc_SocketEvent, this, 0, &dwThreadId );
if( m_hThreadEvent == NULL )
break;
// 创建定时发送心跳包的事件句柄
m_hEventHeartbeat= CreateEvent( NULL,TRUE,FALSE,NULL );
if( m_hEventHeartbeat == NULL )
break;
// 创建定时发送心跳包的线程
m_hThreadHeartbeat = CreateThread( NULL,0,ThreadProc_Heartbeat,this,0, &dwThreadId );
if( m_hThreadHeartbeat == NULL )
break;
// 全部创建成功,返回TRUE
return TRUE;
}
⑽ 怎样判断socket连接成功
socket建立连接失败会抛出异常,你只需要在catch里捕捉异常就可以了catch(exceptione){System.out.println("服务器/客户端未连接");return;}