c++ socket的知识点

来源:互联网 发布:毒品网络在线观看 编辑:程序博客网 时间:2024/06/15 12:33
关于socket
如何将输入的服务器名转化为ip
struct hostent *phost=gethostbyname("pop.163.com");
SOCKADDR_IN serAddr;
memcpy(&serAddr.sin_addr.S_un.S_addr,phost->h_addr_list[0],phost->h_length);
char* ch=inet_ntoa(serAddr.sin_addr);
socket
send(socket,char*,strlen(char *),0)
recv(socket,buf,sizeof buf,0);


关于socket错误码
获取错误码函数 WSAGetLastError()
常见错误码
1.socket
SOCKET sock=socket(AF_INET,SOCK_STREAM,0);
(1)参数1(协议)错误
错误:10047(使用了与请求的协议不兼容的地址) 
(2)参数2
头文件中定义的只有如下几种标准类型: 
#define SOCK_STREAM     1               /* stream socket */
#define SOCK_DGRAM      2               /* datagram socket */
#define SOCK_RAW        3               /* raw-protocol interface */
#define SOCK_RDM        4               /* reliably-delivered message */
#define SOCK_SEQPACKET  5               /* sequenced packet stream */ 
使用非如上定义的类型。 
错误:10044(在这个地址家族中不存在对指定的插槽类型的支持) 
(3)参数3
通常是0,不多说
2.bind
int bind(socket,const struct sockaddr FAR*name,int name)
这个FAR*解释
一般被称作指针运算符,又叫反向取址运算符,与&作用相反 指针,其实就是一个变量,只是它的值是另一个变量或是常量的地址罢了,而*的作用便是把这个地址所存放的值取出(看不懂)
(参数1)
错误号:10038(在一个非套接字上尝试了一个操作)
其实就是无效socket
(参数2)
错误码:10048(通常每个套接字地址(协议/网络地址/端口)只允许使用一次) 
参数(3)
错误码:10014(系统检测到在一个调用中尝试使用指针参数时的无效指针地址) 
3.listen
int listen(s,int);
错误号:10022(提供了一个无效的参数) socket无效
4.accept
accept(socket,struct sockaddr FAR*addr,int FAR addlen);
(1)参数1
错误号:10022(提供了一个无效的参数) 无效的socket
(2)参数2
5.recv
int recv(socket,char FAR*buf,int len,int flag);
(参数1)
错误号:10038(在一个非套接字上尝试了一个操作) 无效的socket
错误号:10057(由于套接字没有连接并且 当使用一个 sendto 调用发送数据报套接字时)没有提供地址, 发送或接收数据的请求没有被接受。 ) 
(2)参数2
错误号:10014(系统检测到在一个调用中尝试使用指针参数时的无效指针地址) 指向无效缓冲区
(3)参数
len过长可能造成缓冲区溢出。 
这个属于编程中的普遍考虑问题,不是socket函数特有。
(4)参数
一般为0,设置为MSG_PEEK时,读取但不移除数据
6.send
int send( SOCKET  s , const char FAR*  buf , int  len , int  flags   ); 
错误号:10038(在一个非套接字上尝试了一个操作)无效soket
错误号:10057(由于套接字没有连接并且 当使用一个 sendto 调用发送数据报套接字时)没有提供地址, 发送或接收数据的请求没有被接受。 ) 
len必须要和发送的长度一致









原创粉丝点击