Winsock用UDP的socket,无法绑定IP端口,老是10049错误,“在其上下文中,该请求的地址无效”。怎么解决?谁能给个例子

stoat 2008-09-12 06:39:49
Winsock用UDP的socket,无法绑定IP端口,老是10049错误,“在其上下文中,该请求的地址无效”。怎么解决?
...全文
1006 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
stoat 2008-09-14
  • 打赏
  • 举报
回复
呵呵,就是这里影响到bind了,谢了!
local.sin_addr.s_addr = INADDR_ANY;//三处

标准的写法是 local.sin_addr.s_addr = htonl(INADDR_ANY); 不过INADDR_ANY就是0,转不转字节序都一样
内存泄漏 2008-09-12
  • 打赏
  • 举报
回复
local.sin_port = htons((short)0); ??????? 换1024以后的别的端口试试..
rookieme 2008-09-12
  • 打赏
  • 举报
回复
改了3处 :
SOCKADDR_IN local;
SOCKADDR_IN dest;
SOCKADDR_IN from;

char send[8] = {"1234567"};
int len = 8;
char recv[1024] = {0};
int recvLen = 1024;
int rc;
int a;

int addLen = 0;//sizeof(SOCKADDR_IN);一处

SOCKET sock = socket(AF_INET,SOCK_DGRAM,IPPROTO_IP);//0);二处

dest.sin_family = AF_INET;
dest.sin_port = htons((short)5000);
dest.sin_addr.s_addr = inet_addr("192.168.3.222");

local.sin_family = AF_INET;
local.sin_port = htons((short)0);
local.sin_addr.s_addr = INADDR_ANY;//三处

rc = bind(sock, (sockaddr*)&local, sizeof(SOCKADDR_IN));
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}

rc = sendto(sock, send, len, 0, (sockaddr*)&dest, sizeof(SOCKADDR_IN));
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}

rc = recvfrom(sock, recv, recvLen, 0, (LPSOCKADDR)&from, &addLen);
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}
stoat 2008-09-12
  • 打赏
  • 举报
回复
WSAData wsaData;
WSAStartup(MAKEWORD(2,2), &wsaData);

SOCKADDR_IN local;
SOCKADDR_IN dest;
SOCKADDR_IN from;

char send[8] = {"1234567"};
int len = 8;
char recv[1024] = {0};
int recvLen = 1024;
int rc;
int a;

int addLen = sizeof(SOCKADDR_IN);

SOCKET sock = socket(AF_INET,SOCK_DGRAM,0);

dest.sin_family = AF_INET;
dest.sin_port = htons((short)5000);
dest.sin_addr.s_addr = inet_addr("192.168.3.222");

local.sin_family = AF_INET;
local.sin_port = htons((short)6);
local.sin_addr.s_addr = inet_addr("INADDR_ANY");//INADDR_ANY

rc = bind(sock, (sockaddr*)&local, sizeof(SOCKADDR_IN));
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}

rc = sendto(sock, send, len, 0, (sockaddr*)&dest, sizeof(SOCKADDR_IN));
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}

rc = recvfrom(sock, recv, recvLen, 0, (sockaddr*)&from, &addLen);
if (rc == SOCKET_ERROR)
{
a = WSAGetLastError();
}

WSACleanup();
rookieme 2008-09-12
  • 打赏
  • 举报
回复
代码?

18,363

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧