急!!在线等 UDP Sock客户端收不到服务器响应

winyee123 2007-11-15 09:49:37
服务器运行在公网IP上,客户端运行在ADSL拨号的局域网内,服务器能够收到客户端的消息,但是当服务器使用收到的IP和端口回复消息到客户端,客户端收不到,理论上应该能收到的,不知道哪里错了,请高手指点,
代码如下:
服务器:
main()
{
SOCKET PrimaryUDP;
PrimaryUDP = mksock(SOCK_DGRAM);

sockaddr_in local;
local.sin_family=AF_INET;
local.sin_port= htons(SERVER_PORT);
local.sin_addr.s_addr = htonl(INADDR_ANY);
int nResult=bind(PrimaryUDP,(sockaddr*)&local,sizeof(sockaddr));
if(nResult==SOCKET_ERROR)
throw Exception("bind error");

sockaddr_in sender;
stMessage recvbuf;
memset(&recvbuf,0,sizeof(stMessage));
for(;;)
{
int dwSender = sizeof(sender);
int ret = recvfrom(PrimaryUDP, (char *)&recvbuf, sizeof(stMessage), 0, (sockaddr *)&sender, &dwSender);
.....

sendto(PrimaryUDP, (const char*)&nodecount, sizeof(int), 0, (const sockaddr*)&sender, sizeof(sender));

}


客户端:

void ConnectToServer(SOCKET sock,char *username, char *serverip)
{
sockaddr_in remote;
remote.sin_addr.S_un.S_addr = inet_addr(serverip);
remote.sin_family = AF_INET;
remote.sin_port = htons(SERVER_PORT);

stMessage sendbuf;
sendbuf.iMessageType = LOGIN;
strncpy(sendbuf.message.loginmember.userName, username, 10);

sendto(sock, (const char*)&sendbuf, sizeof(sendbuf), 0, (const sockaddr*)&remote,sizeof(remote));

int usercount;
int fromlen = sizeof(remote);
int iread = recvfrom(sock, (char *)&usercount, sizeof(int), 0, (sockaddr *)&remote, &fromlen);

...全文
135 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
不知,帮顶
回复
liliangjava 2007-11-26
首先客户端发送信息时,要用监听的socket
然后服务端接收信息,返回时,要用监听的socket和用来接收的数据报来向回发送!

不知道听明白没??

回复
sxcong 2007-11-20
int iread = recvfrom(sock, (char *)&usercount, sizeof(int), 0, (sockaddr *)&remote, &fromlen);
直接这样应该是不行的,因为UDP是面向无连接,不保证一定能发成功或收成功。最好,发送和接收单独分成两个线程来做。 以接收为倒,在线程中
while(1)
{
recvfrom
}
这样试试
回复
newone2007 2007-11-19
是不是客户端和服务器两者的收发没有协调好.在客户端发送后准备接收,如果服务器已经发送结束,客户端就无法收到服务器的回应,阻塞在recvfrom.
再服务器的recvfrom和sendto之间加个延时试试.


回复
tsasdf 2007-11-17
比较奇怪
回复
相关推荐
发帖
通信技术
创建于2007-08-27

4061

社区成员

通信技术相关讨论
申请成为版主
帖子事件
创建了帖子
2007-11-15 09:49
社区公告
暂无公告