| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1145 人关注过本帖
标题:请教一下 一个基于UDP的通讯程序的问题
只看楼主 加入收藏
yh1
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-29
收藏
 问题点数:0 回复次数:7 
请教一下 一个基于UDP的通讯程序的问题

服务端:

#include<stdio.h>

#include<Winsock2.h>

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!=0)
{
return;

}
if(LOBYTE(wsaData.wVersion)!=1||
HIBYTE(wsaData.wVersion)!=1) {

WSACleanup();

return;

}


SOCKET sockSrv=socket(AF_INET,SOCK_DGRAM,0);//创建套接字


SOCKADDR_IN addrSrv;

addrSrv.sin_addr.S_un.S_addr=htonl(INADDR_ANY);

addrSrv.sin_family=AF_INET;

addrSrv.sin_port=htons(6000);

bind(sockSrv,(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

SOCKADDR_IN addrClient;


int len=sizeof(SOCKADDR);


char recvBuf[100];

recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);//接收数据

printf(" %s\n",recvBuf);

closesocket(sockSrv);

WSACleanup();
}


客户端:
#include<stdio.h>

#include<Winsock2.h>

//调用套接字

void main()
{
WORD wVersionRequested;
WSADATA wsaData;
int err;

wVersionRequested=MAKEWORD(1,1);

err=WSAStartup(wVersionRequested,&wsaData);

if(err!=0)
{
return;

}
if(LOBYTE(wsaData.wVersion)!=1||
HIBYTE(wsaData.wVersion)!=1) {

WSACleanup();

return;

}

SOCKET sockClient=socket(AF_INET,SOCK_DGRAM,0);//创建套接字

SOCKADDR_IN addrSrv;//定义一个地址结构体的变量

addrSrv.sin_addr.S_un.S_addr=inet_addr("127.0.0.1");
addrSrv.sin_family=AF_INET;
addrSrv.sin_port=htons(6000);

sendto(sockClient,"hello",strlen("hello")+1,0,
(SOCKADDR*)&addrSrv,sizeof(SOCKADDR));

closesocket(sockClient);

WSACleanup();

}

我用vc++6.0编译过是没错误的,但不知道为什么服务端一运行就有一大堆随机字!
而且当我运行客户端后,服务端又没受到数据!
请各位帮帮忙解析一下!万分感谢!!

[此贴子已经被作者于2007-9-23 16:34:49编辑过]

搜索更多相关主题的帖子: UDP 通讯 
2007-09-23 16:24
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
收藏
得分:0 
问题 ???

try new catch
2007-09-23 16:32
yh1
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-29
收藏
得分:0 
回复:(Arcticanimal)问题 ???
不好意思 刚才好没写好问题就上传了
现在问题已经提出了。期盼你的解答

Thinking one minute is better than talking an hour!!!
2007-09-23 16:38
Janlex
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:303
专家分:0
注 册:2006-9-12
收藏
得分:0 
6000端口是QQ服务端发过来的协议消息...

★★★★★欢迎光临我的博客 ★★★★★
http://www.
2007-09-23 16:49
Arcticanimal
Rank: 3Rank: 3
等 级:论坛游民
威 望:7
帖 子:341
专家分:20
注 册:2007-3-17
收藏
得分:0 
因为服务端的缓冲区没有初始化
char recvBuf[100];
memset(recvBuf, 0, 100);//加上这个就OK 了
recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);//接收数据

try new catch
2007-09-23 16:49
yh1
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-29
收藏
得分:0 

加上了memset(recvBuf,0,100)是没有了一运行的随机字

但是运行客户端后,服务端也接收不了数据啊

我加上recvfrom(sockSrv,recvBuf,100,0,(SOCKADDR*)&addrClient,&len);

也没有接到数据!!


Thinking one minute is better than talking an hour!!!
2007-09-23 17:08
yh1
Rank: 1
等 级:新手上路
帖 子:42
专家分:0
注 册:2006-10-29
收藏
得分:0 
回复:(Arcticanimal)因为服务端的缓冲区没有初始化...

谢谢了 我的问题解决了 我不知道是不是我的机子问题
我重启电脑后就可以接收到数据了
但我还有一个问题 就是我把端口6000改成别的就不能接收了
请问一下:基于UDP的通讯程序就只能是6000端口么!!

[此贴子已经被作者于2007-9-23 17:55:55编辑过]


Thinking one minute is better than talking an hour!!!
2007-09-23 17:55
红专三少
Rank: 1
等 级:新手上路
帖 子:58
专家分:0
注 册:2007-7-14
收藏
得分:0 
应该不是吧,有些端口被其他程序在用就不行。
2007-09-24 17:59
快速回复:请教一下 一个基于UDP的通讯程序的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.033450 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved