Socket API的问题,求助

fishskin 2001-12-04 04:25:38
BOOL SSTInitSock()
{
//Define Variable
WORD wVersionrequested;
WSADATA wsaData;
int nErr;
wVersionrequested = MAKEWORD( 1, 2 );

//Start Sock
nErr = WSAStartup( wVersionrequested, &wsaData );
if ( nErr == -1)
{
return FALSE;
}
return TRUE;
}

BOOL SSTConnectSock()
{
//Define Variable
int msgsock;
char server_address[15] = {"90.0.12.13"};//{"127.0.0.1"};
//Ini Sock
ClientSock = socket( AF_INET, SOCK_STREAM, 0 );
if (ClientSock==INVALID_SOCKET)
{
SlonMessageBox( "scoker err", 24, NULL, 0, 0 );
return FALSE;
}

// Address
addrConn.sin_family = PF_INET;
addrConn.sin_port = htons(9898);
addrConn.sin_addr.s_addr = inet_addr( server_address );

// Connect
addrConn.sin_addr.s_addr = inet_addr( server_address );
msgsock = connect( ClientSock, (struct sockaddr*)&addrConn, sizeof(sockaddr_in) );
if( msgsock )
return FALSE;
return TRUE;
}

void SockSend( const char* buf, INT32 nLen )
{
INT16 nSentLen = 0 ,nSent = 0;
nLen ++ ;
while(1)
{
nSent = send( ClientSock, buf+nSentLen, nLen-nSentLen, MSG_OOB );
if( nSent )
nSentLen += nSent;
if( nSentLen == nLen )
break;
}
return;
}

INT16 SockRecv( char* buf, INT32 nLen )
{
INT16 nRevLen = 0 ,nReved = 0;
while(1)
{
nReved = recv( ClientSock, buf+nRevLen, nLen-nRevLen, MSG_PEEK );
if( nReved )
nRevLen += nReved;
if( nRevLen == nLen )
break;
}
return nRevLen;
}
用以上代码进行发送接收,发送没有问题,接收的时候要么收不到数据,要么可以重复收,不只是什么问题,请帮忙。
...全文
115 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dash 2001-12-15
  • 打赏
  • 举报
回复
用tcp接收,似乎就有这种问题。关住中
白驼山宋兵甲 2001-12-15
  • 打赏
  • 举报
回复
来一份,看看,我帮你改 hdonglei@163.com
hdonglei@sina.com

hdonglei@263.net
hdonglei@263X.net
cmpp 2001-12-15
  • 打赏
  • 举报
回复
我来学习一下!
sunyuzhe114 2001-12-09
  • 打赏
  • 举报
回复
http://www.csdn.net/expert/topic/411/411075.shtm
分数为150分
十万火级,如能给出答案,再送300分
有兴趣的人留下email
我把程序发给你们。
一个很cool的表格程序,请问如何改为activeX控件,有兴趣的我把源代码发给你们,感兴趣的人留下email,
是vc写的非常cool
step_by_step 2001-12-09
  • 打赏
  • 举报
回复
我看看
tide 2001-12-09
  • 打赏
  • 举报
回复
可以用Select进行保护
fd_set fds;
int nError;
struct timeval timeout;
timeout.tv_sec = iWaitTime; // second timeout
timeout.tv_usec = 0;
FD_ZERO(&fds);
FD_SET( m_hSocket, &fds ); //向集合fds添加hSocket
nError = select( m_hSocket + 1, &fds, NULL, NULL, &timeout );
if( nError <=0 )
{
sprintf(szError,"网络错误");
return -1;
}

cmpp 2001-12-09
  • 打赏
  • 举报
回复
我来学习一下!
cmpp 2001-12-09
  • 打赏
  • 举报
回复
我来学习一下!

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧