SOCKET s=socket(AF_INET, SOCK_STREAM, 0);
int rc = 0;
sockaddr_in server;
server.sin_port = htons(80);
server.sin_family = AF_INET;
server.sin_addr.S_un.S_addr = INADDR_ANY;
rc = bind(s, (struct sockaddr *)&server, sizeof(server));每次RC返回都是-1,BIND失败,为什么??
int rc = 0;
sockaddr_in server;
server.sin_port = htons(80);
server.sin_family = AF_INET;
server.sin_addr.S_un.S_addr = INADDR_ANY;
rc = bind(s, (struct sockaddr *)&server, sizeof(server));每次RC返回都是-1,BIND失败,为什么??
他说是
在一个非套接字上尝试了一个操作。
不懂……
2,把server结构初始化一下
什么叫对不对呢?
server我不是已经结构初始化过了吗?
靠,那那句SOCKET s=socket(AF_INET, SOCK_STREAM, 0);该怎么写?我WSAStartup 已经加上了
如果用#include <winsock.h>就会有连接错误~
为什么??
WSAStartup(MAKEWORD(2, 2), &data);像上面那样调用 WSAStartup 应该没问题. // 这样包含吧, 别用 afxsock.h
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);应该就没问题了,
INADDR_ANY是网络序列应改为主机序列;
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY);应该就没问题了,
INADDR_ANY是"主机序列"应改为"网络序列";SORRY,刚才写反了:)
int Status = WSAStartup(MAKEWORD(2, 2), &data);
if(Status == SOCKET_ERROR)
return 0; SOCKET s = socket(AF_INET, SOCK_STREAM, 0);
if (s == INVALID_SOCKET)
{
return 0;
}
int rc = 0; sockaddr_in server;
server.sin_port = htons(1028);
server.sin_family = AF_INET;
server.sin_addr.S_un.S_addr = htonl(INADDR_ANY); rc = bind(s, (LPSOCKADDR)&server, sizeof(server));
int a = WSAGetLastError();
if(rc = SOCKET_ERROR)
{
AfxMessageBox("bind 失败");
return 0;
}
这次用WSAGetLastError();问题变成
通常每个套接字地址 (协议/网络地址/端口) 只允许使用一次。
bFlag = TRUE;setsockopt(Socket,SOL_SOCKET,SO_REUSEADDR,(char*)&bFlag,sizeof(bFlag)) 来定义端口可以重复使用。
是端口被占用了
我改成server.sin_port = 0;
就好了