udp编程

lzxjxsy 2005-03-04 10:04:11
各位大哥帮我看看下面的代码为什么有什么问题吗?


服务器端:
#include <iostream.h>
#include <winsock2.h>
#include <stdlib.h>
#include <stdio.h>
#include <windows.h>

SOCKET sockets;
sockaddr_in sock;
sockaddr to;
char szStr[20];

int main(int argc, char argv[])
{
sock.sin_addr.s_addr = INADDR_ANY ;
sock.sin_family = AF_INET;
sock.sin_port = htons(5000);

sprintf(to.sa_data, "%s", "127.0.0.1");
to.sa_family = AF_INET;
int nLen = sizeof(to);
WSAData wsaData;
if(WSAStartup(2, &wsaData) != 0)
{
cout << "socket initial failed!" << endl;
return -1;
}

if((sockets = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
cout << "build sockets failed" << endl;
return -1;
}

if(bind(sockets, (struct sockaddr*)&sock, sizeof(sock)) != 0)
{
cout << "bind failed!" << endl;
return -1;
}

sprintf(szStr, "%s", "okok");
for(int j=0; j<100; j++)
{
int i = sendto(sockets, szStr, sizeof(szStr), 0, &to, nLen);
cout << i << endl;
Sleep(1000);
}

}


客户端:

#include <iostream.h>
#include <stdlib.h>
#include <stdio.h>
#include <winsock2.h>
#include <windows.h>
#include "gtAlarmClnt.h"

SOCKET sockets;
char szBuf[1024];

sockaddr from;

int main()
{
from.sa_family = AF_INET;
sprintf(from.sa_data, "127.0.0.1");
int nLen = sizeof(from);
WSAData wsaData;
if(WSAStartup(2, &wsaData) != 0)
{
cout << "---socket initial failed!---" << endl;
return -1;
}

if((sockets = socket(AF_INET, SOCK_DGRAM, 0)) == INVALID_SOCKET)
{
cout << "---build sockets failed!---" << endl;
return -1;
}

fd_set fdR;
struct timeval timeout;
timeout.tv_usec = 0;
timeout.tv_sec = 10;
FD_ZERO(&fdR);
FD_SET(sockets, &fdR);
for(int i = 0; i<10; i++)

{
int j = select(sockets+1, &fdR, NULL, NULL, &timeout);
if((j != 0) && (j != SOCKET_ERROR))
{
recvfrom(sockets, szBuf, sizeof(szBuf), 0, &from, &nLen);
cout << szBuf << endl;
}
else
{
cout << "fail" << endl;
}
}
}

我的服务器在不断的发送消息,可是客户端总是收不到,这是怎么回事啊。
各位大哥拜托了。
...全文
558 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
sailorvii 2005-03-07
  • 打赏
  • 举报
回复
select fd_set到网上查一下,有很多的
Dong 2005-03-05
  • 打赏
  • 举报
回复
就算是发送也要指定服务/客户两边的端口的啊!

关于不用监听我也知道啊!一时模糊而已
lzxjxsy 2005-03-05
  • 打赏
  • 举报
回复
to (杂事动物)

服务器客户端又没有建立连接怎么监听端口啊,只有建立了连接才用监听端口啊.
lzxjxsy 2005-03-05
  • 打赏
  • 举报
回复
各位大哥,我是想问一下,select函数的用法,具体详细一点,也就是使用无阻塞的通信,
那位大哥说清楚了并切实能用,我马上给分.
yeehya 2005-03-05
  • 打赏
  • 举报
回复
好象有一点楼主忽略了,服务器一开始并不知道客户端的地址.
只有先recevfrom(...)才能得知客户究竟是谁.
所以,如果你在服务器端发什么,客户是不知道的.也许你的程序没错.
yeehya 2005-03-05
  • 打赏
  • 举报
回复
应该都采用sockaddr_in在客户端也指定port。
yeehya 2005-03-05
  • 打赏
  • 举报
回复
sockaddr_in 与sockaddr
tudou614 2005-03-05
  • 打赏
  • 举报
回复
GZ + 学习
wshcdr 2005-03-05
  • 打赏
  • 举报
回复
楼主的客户端是没有去监听端口

Togecy2005 2005-03-04
  • 打赏
  • 举报
回复
客户端sockets = socket(AF_INET, SOCK_DGRAM, 0) 又在用recvfrom 好象不对哦
Dong 2005-03-04
  • 打赏
  • 举报
回复
我的服务器在不断的发送消息,可是客户端总是收不到,这是怎么回事啊。
------------------------------------
udp是不管是否连接上都可以发信息的,很明显的,你的客户端没有监听的断口5000
而且udp不用listen()吗??(这点不确定可以不用)
tysoccer 2005-03-04
  • 打赏
  • 举报
回复
我想借此机会问问,有没有什么好一点的socket编程的教材

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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