UDP发送端指定端口

xs19880126 2012-01-06 10:43:12
如题,请问UDP发送端如何指定端口,我用Bind但是返回-1;还有想绑定指定源端口还可以怎么做; 源码如下
SOCKET_HANDLE hSocket;
SOCKADDR_IN addrRecv;
if (0 == (hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)))
{
Log("创建UDP Socket句柄失败!");
return FALSE;
}
addrRecv.sin_family = AF_INET;
addrRecv.sin_port = htons(nPort);
addrRecv.sin_addr.S_un.S_addr = htonl(lpszIP);



SOCKADDR_IN addrMe;
addrMe.sin_family = AF_INET;
int portu = 8012;
addrMe.sin_port = ntohs(portu);
addrMe.sin_addr.S_un.S_addr = htonl(0);
int ibin;

ibin = bind(hSocket, (sockaddr*)&addrMe, sizeof(addrMe));
//ibin = WSAGetLastError();



int nSended = sendto(hSocket, pData, nLen, 0, (sockaddr*) &addrRecv, (int)sizeof(addrRecv));

分不多,新手谢谢大家了!!!
...全文
540 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
leetow2003 2012-01-07
  • 打赏
  • 举报
回复
奇怪,我运行代码没有出现错误
gameslq 2012-01-06
  • 打赏
  • 举报
回复
代码

#include <winsock.h>
#include <stdio.h>

#pragma comment (lib,"ws2_32")

//端口
const int nPort = 1024;
//发送地址
const char *lpszIP = "127.0.0.1";


int main(void)
{
SOCKET hSocket = 0;
SOCKADDR_IN addrRecv;
WSADATA wsdata;

do
{
memset(&wsdata,0,sizeof(WSADATA));
//初始化库
if ( WSAStartup(2<<8|2,&wsdata) != 0 )
{
printf("initiation socket failed\n");
return -1;
}


if (0 == (hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)))
{
printf("创建UDP Socket句柄失败!");
return -2;
}

addrRecv.sin_family = AF_INET;
addrRecv.sin_port = htons(nPort);
addrRecv.sin_addr.S_un.S_addr = inet_addr(lpszIP);


//绑定地址
SOCKADDR_IN addrMe;
addrMe.sin_family = AF_INET;
int portu = 8012;
addrMe.sin_port = htons(portu);
addrMe.sin_addr.S_un.S_addr = htonl(0);
int ibin;

if ( (ibin = bind(hSocket, (sockaddr*)&addrMe, sizeof(addrMe))) == SOCKET_ERROR )
{
printf("bind error,code:%d\n",WSAGetLastError());
break;
}



int nSended = sendto(hSocket, pData, nLen, 0, (sockaddr*) &addrRecv, (int)sizeof(addrRecv));
}while (0 );

if ( hSocket != 0 )
closesocket(hSocket);
WSACleanup();

return 0;
}


用WSAGetLastError查是 1006
错误码不正确。
Eleven 2012-01-06
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xs19880126 的回复:]
用WSAGetLastError查是 1006
[/Quote]
1006: 文件所在的卷已被外部改变,因此打开的文件不再有效。
???
mayudong1 2012-01-06
  • 打赏
  • 举报
回复
SOCKADDR_IN addrMe;
addrMe.sin_family = AF_INET;
int portu = 8012;
addrMe.sin_port = ntohs(portu);
addrMe.sin_addr.S_un.S_addr = htonl(0);
xs19880126 2012-01-06
  • 打赏
  • 举报
回复
用WSAGetLastError查是 1006
leetow2003 2012-01-06
  • 打赏
  • 举报
回复
你先用WSAGetLastError()获得
错误信息,再查查是什么原因
dleijl 2012-01-06
  • 打赏
  • 举报
回复
(0 == (hSocket = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP)))
中这一句hSocket初始化为0了吗?你用CSocket::Create创建试试

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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