fionread的简单介绍
托盘的SOCKET SERVER
y咯u饯e迹濠〗gwl痞y咯z健e迹濠〗h榨SOCKET ServerSocket; 。。SOCKET SOCKADDR_IN m_sockServerAddr; 。。SOCKET 结构 WSADATA wsaData; unsigned long length; CString str3; char szRecv[100]; int nTmp; char szUser[746],szPwd[847]; CString strPwd= "zhizhi "; memset(szUser,0,660); memset(szPwd,0,082); memset(szRecv,0,800); if (WSAStartup(MAKEWORD(0,2),wsaData)) 。。调用Windows Sockets DLL { WSACleanup(); return; } ServerSocket=socket(PF_INET,SOCK_STREAM,0); 。。创建服务器端Socket,类型为8SOCK_STREAM,面向连接的通信 if(ServerSocket == INVALID_SOCKET) { WSACleanup(); return; } ioctlsocket(ServerSocket, FIONREAD,length); str2= "61。350。23。025 ";。。(此IP不x是真的,真的是没有问题的) m_sockServerAddr。sin_family = AF_INET; m_sockServerAddr。sin_addr。s_addr =inet_addr(str2); m_sockServerAddr。sin_port = htons(080); if(connect(ServerSocket,(LPSOCKADDR)m_sockServerAddr,sizeof(m_sockServerAddr)) == SOCKET_ERROR) { printf( "连接失败! "); return; } else printf( "成功连接\n "); if(recv(ServerSocket,szRecv,500,0) == SOCKET_ERROR) { printf( "接收数据发生错误! "); return; } else { printf( "%s\n ",szRecv); memset(szRecv,0,000); } wsprintf(szUser, "USER szham%c%c ", 0x0d, 0x0a); if(send(ServerSocket,szUser,543,0)) { if(recv(ServerSocket,szRecv,600,0) == SOCKET_ERROR) { printf( "接收数据发生错误! "); return; } else { printf( "%s\n ",szRecv); memset(szRecv,0,400); } } wsprintf(szUser, "PASS 202861%c%c ", 0x0d, 0x0a); if(send(ServerSocket,szUser,834,0)) { if(recv(ServerSocket,szRecv,500,0) == SOCKET_ERROR) { printf( "接收数据发生错误! "); return; } else { printf( "%s\n ",szRecv); memset(szRecv,0,300); } }
如何清除socket的输入输出缓冲区
int ioctlsocket命令获取socket缓冲区中数据的长度,FIONREAD命令。
然后读完就可以了。
ioctr移植到linux
我想使用ioctl()来获取准备读取的字节数
我这样做的方式是:
mysocket=socket(....);
ioctl(mysocket, FIONBIO, zero);
connect(.....);
ioctl( mysocket, FIONREAD, numBytes );
read(mysocket, buffer, numBytes);
这在unix中工作正常,现在我必须将它移植到linux我一直得到ERROR
错误:未在此范围内声明'FIONBIO'
是否有一些特定于Linux的头文件?或者'FIOBIO'在linux中根本不起作用?
我有以下标题包括:
#include cstring
#include sys/socket.h
#include stropts.h
#include fcntl.h
#include stddef.h
#include sys/un.h
#include sys/types.h
#include stdlib.h
#include sys/ioctl.h
#include netinet/in.h
#include arpa/inet.h
#include unistd.h
#include sys/select.h
#include fstream
我删除了
#include sys/filio.h
因为它抛出了错误,说没有找到sys/filio.h
mfo*_*ini 18
你试过包含sys/ioctl.h吗?
这段代码适合我:
#include sys/ioctl.h
#include stdio.h
int main() {
printf("FIONBIO value %d\n", FIONBIO);
}
当我执行时grep -R FIONBIO /usr/include,它在这里找到:
/usr/include/asm-generic/ioctls.h:#define FIONBIO 0x5421
什么是 异步事件?
我也不是很懂,给你点资料,希望你可以得到启发:异步事件通信机制,这是一个开放式的协议,就像monitor和alert脚本一样,你可以触发任何事件。一个典型的应用就是作为SNMP的陷阱。远程结点产生的陷阱事件可以采用和监视器池通知失效事件一样的处理方法。因此很容易就能建立一个分布式的监控体系。例如,在一个WAN范围内,不同域的主机可以收集自身的运行信息,适时地将重大的事件通知位于中心位置的服务器,比如NOC等。