love潇洒小峰 2015-10-24 03:54 采纳率: 75%
浏览 1503
已采纳

关于WinSocket编程的小问题

我在本机创建2个UDP程序,一个发送数据,另一个接收数据,可每次只能发送一次数据,第二次发送数据的时候那边就收不到了,是怎么回事啊,这是代码
#include
#include
#pragma comment(lib,"WS2_32.lib")

int main()
{
//初始化网络
WSADATA wsaData;
WORD wVersion = MAKEWORD(2, 2);
WSAStartup(wVersion,&wsaData);

//建立socket
SOCKET sServer = socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);

//节点信息
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(16568);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");

//绑定套接字到节点
if (bind(sServer, (LPSOCKADDR)&sin, sizeof(sin)) == SOCKET_ERROR)
{
    return 0;
}

//接收数据
char szBuf[1024];
SOCKADDR_IN addr;
int nlen = sizeof(addr);
while (1)
{
    int nRecv = recvfrom(sServer,szBuf,strlen(szBuf),0,(SOCKADDR*)&addr,&nlen);
    if (nRecv > 0)
    {
        szBuf[nRecv] = '\0';
        printf("接收到的数据:%s\n",szBuf);

    }
}

//关闭socket,释放网络
closesocket(sServer);
WSACleanup();
return 0;

}

这是另一个UDP程序
#include
#include
#pragma comment(lib,"WS2_32.lib")

int main()
{
//初始化网络
WSADATA wsaData;
WORD wVersion = MAKEWORD(2, 2);
WSAStartup(wVersion, &wsaData);

//建立socket
SOCKET sClient = socket(AF_INET, SOCK_DGRAM, IPPROTO_UDP);

//目标节点信息
SOCKADDR_IN sin;
sin.sin_family = AF_INET;
sin.sin_port = htons(16568);
sin.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");



//发送数据
char szBuf[1024];
while (1)
{
    gets(szBuf);
    if (strcmp(szBuf, "exit") == 0)
        break;
    sendto(sClient, szBuf, strlen(szBuf), 0, (SOCKADDR*)&sin, sizeof(sin));
}

//关闭socket,释放网络
closesocket(sClient);
WSACleanup();
return 0;

}

  • 写回答

2条回答 默认 最新

  • zuishikonghuan 2015-10-24 11:19
    关注

    UDP协议本身就是无连接不可靠的协议,丢失几个包很正常,TCP协议虽然也基于无连接不可靠的IP协议,但是他有严密的校验,超时重发机制,一般不会出现丢失包的问题

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵