简体   繁体   English

套接字不适用于iPhone SDK 3.0+

[英]Socket not working for iPhone SDK 3.0+

My code was working absolutely fine before the launch of iPhone SDK 3.0 , I am using socket functions to send data and receive data. 在发布iPhone SDK 3.0之前,我的代码运行得非常好,我正在使用套接字函数来发送数据和接收数据。 What changes must i make to make it compatible for 3.0+. 我必须进行哪些更改才能使其与3.0+兼容。

-(int)InitSocket:(int)nPort: (NSString*)sServer{

if(sServer == nil)
{
    return -1;
}
m_nPort = nPort;
sServerAddress = sServer;

const char* pServer = nil;
pServer = [sServer cStringUsingEncoding:NSASCIIStringEncoding];

m_nSock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);


struct sockaddr_in servAddr;
memset(&servAddr, 0 , sizeof(servAddr));
servAddr.sin_family = AF_INET;
servAddr.sin_addr.s_addr = inet_addr(pServer);
servAddr.sin_port = htons(m_nPort);

pfd.fd = m_nSock;
pfd.events = POLLIN | POLLERR| POLLHUP | POLLNVAL;
pfd.revents = 0;

m_nTimeout = -1;

int f = fcntl(m_nSock, F_GETFL, 0);
fcntl(m_nSock, F_SETFL, f | O_NONBLOCK |O_NDELAY);

int opt = 1;
setsockopt(m_nSock, SOL_SOCKET, SO_KEEPALIVE, (const void*)&opt,(socklen_t)sizeof(opt));


struct timeval timeout;
fd_set wset;
FD_ZERO(&wset);
FD_SET(m_nSock, &wset);
timeout.tv_sec = 2;
timeout.tv_usec = 0;

return 0;

} }

This Code for sending data 此代码发送数据

-(int)SendData:(size_t) nSize: (NSString*) buffer{

int nTotalSent = 0;
const char *pSend =  [buffer cStringUsingEncoding:NSASCIIStringEncoding];

while(nTotalSent != nSize)
{
            int nSent = send(m_nSock, (const void*)pSend+nTotalSent, nSize-nTotalSent, 0);
    if(nSent == -1)
    {
        return nSent;
    }
    nTotalSent += nSent;
}

return nTotalSent;

} }

Will the above code works in iPhone SDK 3.0+ , what changes i need to employ to make it work. 上面的代码将在iPhone SDK 3.0+中运行吗,我需要进行哪些更改才能使其正常工作。

Thanks 谢谢

You could start by properly checking for errors. 您可以从正确检查错误开始。 All those functions that you use return an error code if something goes wrong and you will never know. 如果出现问题并且您永远不会知道,则您使用的所有这些函数都会返回错误代码。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM