各位大侠,小弟最近在看网络编程,真是困难重重啊,我下面附了一段小小的WINSOCKET的程序,不知道什么原因,绑定和监听都没有成功,等待着各位大侠指点,不胜感激
#include <WINSOCK2.H>
#include <iostream.h>
main()
{
SOCKET socknum; //socket描述符
struct sockaddr_in serveraddr; //服务器地址结构体
char* IPstring = "192.168.1.102"; //字符串形式的服务器IP地址
int IP; //32位整形IP地址
IP = inet_addr(IPstring); //字符串形式的IP地址转换成32位整形IP地址
socknum = socket(PF_INET,SOCK_STREAM,0); //创建一个套接字,并且返回描述符
memset(&serveraddr, 0, sizeof(struct sockaddr_in));
//填充服务器地址结构体的内容
serveraddr.sin_family = AF_INET; //填充协议地址
serveraddr.sin_addr.s_addr = htonl(IP); //填充IP地址
serveraddr.sin_port = htons(3111); //填充端口号
//绑定到服务器的指定网络地址
int b; //当返回值为-1,说明绑定失败
b = bind(socknum, (struct sockaddr *)&serveraddr, sizeof(struct sockaddr_in));
//监听
int c; //当返回值为-1,说明绑定失败
c = listen(socknum, 6);
//若b=-1,c=-1,说明绑定和监听都失败
cout<<"socknum="<<socknum<<endl<<"b="<<b<<endl<<"c="<<c<<endl<<"IP="<<IP<<endl;
}
[解决办法]
WSADATA wsaData; WORD version = MAKEWORD(2,0); int ret = WSAStartup(version,&wsaData); if(ret) { AfxMessageBox("初始化失败!"); } m_Socket = ::socket(AF_INET,SOCK_STREAM,0); ASSERT(m_Socket != NULL); CString str="192.168.0.4"; m_addr.sin_family = AF_INET; m_addr.sin_addr.S_un.S_addr = inet_addr(str); m_addr.sin_port = htons(80); ret = bind(m_Socket,(sockaddr*)&m_addr,sizeof(m_addr)); if(ret ==SOCKET_ERROR) AfxMessageBox("绑定错误!"); ret = listen(m_Socket,5); if(ret ==SOCKET_ERROR) AfxMessageBox("监听错误!");
[解决办法]
1、需要初始化WSAStartup
2、各函数都有返回值,要学会看返回值,并判断错误出现在哪
3、网上有很多demo,先学习下
[解决办法]