这几天写的一个telnet客户端类, 这个类被别的程序调用, 跟server发命令并取结果.所有的操作都不能无限时等待. 所以必须加时间控制, 可是出现了一些怪问题 程序没有设置阻塞时, 一切正常, 只是有些地方会一直等下去, 无法响应用户操作.但 1. 用setsockopt将recv的timeout设为一秒(就是SO_RCVTIMEO选项), 可以在windows下正常工作, 不过在unix下, 这句一直返回-1, error为EINTR. 我用while来一直setsockopt, 每次返回值都是这样, 而...
socket实现ftp协议客户端时
先
s = socket(AF_INET, SOCK_STREAM, 0);
sendBuf="USER "+userName+"\r\n";
//发送给服务器
send(s,sendBuf.c_str(),sendBuf.size(),0);
然后等待服务器返回信息
//接受服务器返回的信息
reLen=recv(s,buffer,100,0);
buffer[reLen]=0;
cout<<"size"<
发送和接收都会有个缓冲区,如果,发送程序(在主机A)一直向接收程序(在主机B)发送数据,假设期间发送程序发出的数据都能正确的发到接收程序,即,发送程序的send或者write都返回正确,那么如果接受程序一直不去recv或者read,那么数据就回一直在系统的接收缓冲区里面直到接收缓冲区满了为止。。。。那么此时,发送程序还能将数据发到接收程序吗?send或者write能赶会成功吗? 请各位指教。。。。 PS:先搜了一下,好象没我这个...
unix下 recv函数是阻塞的么? 比如 if ((numbytes=recv(sockfd, recv_buffer, MAXDATASIZE, 0)) == -1) { //exit(1); printf("recv error!\n"); } do other; 如果服务器端还没有给我发数据,我是不是一直在recv那儿等待?
服务器端通过while来循环调用send函数批量把一个c 的struct的集合传递到server端,server 端在一个while 循环中用recv函数来接收send过来的数据,有数据的时候就recv没有数据的话自然阻塞在recv调用上,server端是迭代服务器没有做fork模式的并发服务器。 但是最近却发现了一个问题,在客户端数量很多的时候recv过来的struct中经常会少数据,有些struct成员就是空白的,请问为什么会发生这个问题呢???
我在调用recv函数进行UDP协议的信息接收时,发现无法使其超时返回。虽然IO::Socket在新建的时候有一个Timeout的参数可以设置,但查资料说是用于TCP协议中的connect与accept当中的。 我现在要在UDP接收的时候进行设置超时,有什么办法吗? 先多谢各位了!
linux下编制网络聊天程序,遇到这样一个问题,当client和server建立好连接后,第一次互相通话可以成功,即客户端先给服务器端发送数据,服务器端可以收到,然后服务器端给客户端发送数据也可以收到,再之后就有问题了,如果客户端不发送数据服务器端一样可以通过recv()函数接收到数据,接收到的为空,即打印出来为空格,俺道理说recv函数为阻塞函数,只有收到数据才会通过啊,可是为什么会出现上述情况呢?我在同一台机器上做的,开...
int CSESocket::recvData(char *p_fName, int p_irecvLen, int p_iTimeout) { int iRet; char strlog[200+1]; char strRev[CONTENT_LEN+1]; struct timeval timeout; timeout.tv_sec = 30; fd_set fdReads; while(1) {  ...
写了一个客户端与服务器端的程序,发现有问题:
服务器端通过send函数将数据发送给客户端的时候,没有问题,存储在sendbuf缓冲区内:
"Linux", '\0'