本文目录一览:
- 1、bind创建失败,sockaddr与sockaddr_in?
- 2、SOCKADDR_IN的基本结构
- 3、SOCKADDR_IN的参数说明
- 4、SOCKADDR_IN的介绍
- 5、sockaddr_in问题【c++】
bind创建失败,sockaddr与sockaddr_in?
1、);strErr.Format(%i,WSAErr);。。} 我这得出结论了:UDP协议,“客户端”也可以BIND;一个SOCKET可以向多个IP通信;两端可以BIND不同的端口,在通信时指定对方的sockaddr_in情况(其内包括端口)即可。
2、进程可以把一个特定的IP地址捆绑到它的套接口上,但是这个IP地址必须是本机的网络接口之一。
3、调用WSAGetLastError察看一下返回值,这个error的原因。可以用netstat查看一下4000端口是否有程序占用,至于乱码,把你的sendbuf初始化为全零试试看。
4、(struct sockaddr *)(&server_addr)这个是一个强制类型转换,就是将结构体&server_addr强制转换成struct sockaddr *类型。这个是c语言范畴的东西。
SOCKADDR_IN的基本结构
1、s_addr按照网络字节顺序存储IP地址sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向sockaddr的结构体,并代替它。
2、sin_port存储端口号(使用网络字节顺序)sin_addr存储IP地址,使用in_addr这个数据结构 sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。
3、(2)初始化sockaddr_in结构的变量,并赋值。
SOCKADDR_IN的参数说明
af参数:说明套接字接口要使用的协议地址族,地址族与协议族含义相同。如果想建立一个TCP或UDP,只能用常量AF_INET表示使用互联网协议(IP)地址。
sa_data是14字节协议地址。此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。
sockaddr FAR name,int namelen);参数说明:s:是一个套接字。name:是一个sockaddr结构指针,该结构中包含了要结合的地址和端口号。namelen:确定name缓冲区的长度。
sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。sin_addr是一个联合体,用联合体就可以使用多种方式表示IP地址。一般我们使用其中的最后一种方式,即用无符号长整型数据来表示IP地址。
功能说明:客户端发送服务请求。成功返回0,否则返回-1,并置errno。参数说明:sock_fd 是socket函数返回的socket描述符;serv_addr是包含远端主机IP地址和端口号的指针;addrlen是结构sockaddr_in的长度。
SOCKADDR_IN的介绍
1、sa_data是14字节协议地址。此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。
2、sin_family表示协议簇,一般用AF_INET表示TCP/IP协议。sin_addr是一个联合体,用联合体就可以使用多种方式表示IP地址。一般我们使用其中的最后一种方式,即用无符号长整型数据来表示IP地址。
3、struct sockaddr_in是已经声明了的结构名,这里当作类型名来使用,如基础类型名int,double等等,addr被声明为struct sockaddr_in类型的变量,就像int a;中的a一样。
4、serviersocket类主要在服务器端程序上开发,用于接收客户的连接请求,主要的方法。
5、sin_addr其实是个4字节联合体,S_addr是它的int模式。
sockaddr_in问题【c++】
1、函数inet_addr的作用其实就是把10.1这样的字符串ip地址转换成0x0100007F这样的32位整数。sin_addr其实是个4字节联合体,S_addr是它的int模式。
2、s_addr按照网络字节顺序存储IP地址sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向sockaddr的结构体,并代替它。
3、sa_data是14字节协议地址。此数据结构用做bind、connect、recvfrom、sendto等函数的参数,指明地址信息。
4、你两个端口都是 3339 ,是不是在同一个虚拟机里面?如果没在同一个虚拟机里面,可能就是防火墙没有关掉。
5、主函数内创建套接字socket函数调用之前,要加个WSAStartup函数。因为默认网络对应的DLL文件是不会自动加载到应用程序上的,必须使用WSAStartup做初始化。