您的位置:程序门 -> vc/mfc -> 网络编程



乱码问题


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


乱码问题
发表于:2007-09-18 09:44:38 楼主
按教材上写了个用udp的服务端,运行后发现屏幕直接打出乱码,我看了半天也没发现错在哪,郁闷啊,下面的是代码


#include   <winsock2.h>
#include   <stdio.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   recvbuffer[100];

recvfrom(socksrv,recvbuffer,100,0,(sockaddr*)&addrclient,&len);
printf( "%s\n ",recvbuffer);
closesocket(socksrv);
        wsacleanup(   );
}
发表于:2007-09-20 21:30:381楼 得分:0
用watch看的时候是不是乱码?
发表于:2007-10-03 08:44:152楼 得分:0
是的,我仔细查了一下,是没有绑定上。我重启机子以后就好了,但是过了一会又坏了,郁闷啊。
发表于:2007-10-05 15:23:003楼 得分:0
发送端怎么发得?
发表于:2007-12-28 22:48:584楼 得分:0
我也是这个问题啊,苦恼了好久了。先运行服务端,直接就是一串的“烫”,就结束了。根本就没等运行客户端来发送数据。

请问lz说没绑定上是怎么回事啊?

盼望lz把解决办法发给我,谢谢了。邮箱地址:berserker0807@google.com
发表于:2007-12-28 23:14:185楼 得分:0
终于解决了我的问题。原来是端口被用了。wsa错误代码是10048。msdn上解释:
wsaeaddrinuse  
(10048)  
address   already   in   use.  
only   one   usage   of   each   socket   address   (protocol/ip   address/port)   is   normally   permitted.   this   error   occurs   if   an   application   attempts   to   bind   a   socket   to   an   ip   address/port   that   has   already   been   used   for   an   existing   socket,   or   a   socket   that   wasn't   closed   properly,   or   one   that   is   still   in   the   process   of   closing.   for   server   applications   that   need   to   bind   multiple   sockets   to   the   same   port   number,   consider   using   setsockopt(so_reuseaddr).   client   applications   usually   need   not   call   bind   at   all   -   connect   will   choose   an   unused   port   automatically.   when   bind   is   called   with   a   wild-card   address   (involving   addr_any),   a   wsaeaddrinuse   error   could   be   delayed   until   the   specific   address   is   "committed."   this   could   happen   with   a   call   to   other   function   later,   including   connect,   listen,   wsaconnect   or   wsajoinleaf.  

我把端口号换了一个就可以了。开心啊!
发表于:2007-12-30 18:23:046楼 得分:0
恭喜楼主


快速检索

最新资讯
热门点击