socket 的常用函数

1. 设置接收缓冲区的
int RevBuf=20;
setsockopt( sNew,SOL_SOCKET,SO_RCVBUF, (char *)&RevBuf,sizeof(RevBuf));


2. 发送缓冲区的  
       SO_SNDBUF


3. 设置超时的
int timeout = 1000; 
bread = setsockopt(SockRaw,SOL_SOCKET,SO_RCVTIMEO,(char*)&timeout, sizeof(timeout)); 




4. 设置地址重用的
int nActivate = 1;
//允许地址重用
if (setsockopt(hSocket, SOL_SOCKET, SO_REUSEADDR, (const char *) &nActivate,sizeof(nActivate)) == SOCKET_ERROR )  {}


5. 连接服务器
SOCKET sock=::socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
sockaddr_in sin;
sin.sin_family=AF_INET;
sin.sin_port=htons(nPort);
sin.sin_addr.s_addr = inet_addr("192.168.100.159");
if(connect(sock,(sockaddr *)&sin,sizeof(sin)) == SOCKET_ERROR)
return ;


6. 建立侦听sock
int MakeStreamSocket()
{
int iErrorCode;
sockaddr_in skAddr;
CString strPort;
CConfigFile::ReadTcpCfg(strPort );
skAddr.sin_addr.s_addr = htonl(INADDR_ANY);
skAddr.sin_port = htons( atoi( strPort ) );
skAddr.sin_family = AF_INET;
SOCKET sk = socket(AF_INET,SOCK_STREAM,0);
if ( sk == INVALID_SOCKET )
{
return INVALID_SOCKET;
}
unsigned long uArg;
uArg = 0;
ioctlsocket( sk,FIONBIO,(unsigned long *)&uArg );
iErrorCode = bind( sk,(sockaddr *)&skAddr,sizeof(sockaddr) );
if ( iErrorCode == SOCKET_ERROR )
{
return INVALID_SOCKET;
}
int nActivate = 2048;
setsockopt( sk,SOL_SOCKET,SO_RCVBUF,(const char *) &nActivate,sizeof(nActivate) );
if ( listen( sk,100 ) != 0 )
{
return INVALID_SOCKET;
}
return sk;
}



7. accept中获取ip

SOCKET   accept   ( SOCKET   s, struct   sockaddr   FAR*   addr,  int   FAR*   addrlen ); 
struct   sockaddr_in   { 
                short       sin_family; 
                u_short   sin_port; 
                struct     in_addr   sin_addr; 
                char         sin_zero[8]; 
}; 
(2)
CAsyncSocket   ConnectedSoc 
MySocket.Accept(ConnectedSoc); 
CString   rPeerAddress; 
UINT           rPeerPort; 
ConnectedSoc.GetPeerName(rPeerAddress,   rPeerPort   ); 






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值