标题: 【求助】Linux IPv6网络通信
sunxpa
新生入学
Rank: 1
注册用户



UID 178818
精华 0
积分 0(积分有什么用?)
帖子 2
阅读权限 10
注册 2007-1-11
状态 离线
发表于 2007-1-12 10:12  资料  个人空间  短消息  加为好友 
【求助】Linux IPv6网络通信

本人正在从事IPv6研究,最近编了一个Linux IPv6 的UDP客户端和服务端程序,其基础是以前可以运行的v4程序之上改编成v6的。我的PC环境是Linux 2.4.18-20,支持IPv6,支持IPv4和ipv6,经过地址配置后可以与另外一台PC相互ping通。当我用编写的程序在一台PC机上测试时,服务端程序接收不到数据,当在两台PC机上测试时,出现如下错误信息:Linux伊甸园论坛?2`        Es_-CO
  bind:Cannot assign requested address-~R'P7FB7]|L
由于本人多年从事Linux软件开发,编写UDP通讯程序应该是很简单的问题,现在出现上述情况,让我很困惑,不知问题出现在何处?请各位有经验的高手指点一下,并回答下述问题,谢谢!
7lSqV8dP+Oh(1)除地址结构和地址解析的差异外,IPv6和IPv4在网络编程方面到底有什么差异?
$P-QGHP3Mq#n(2)既然能够ping通对方的IPv6地址,但为什么会绑定错误,是不是在配置方面要作其它工作?

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 在线
发表于 2007-1-12 10:49  资料  个人空间  短消息  加为好友 
呵呵,no code no talk





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
不容错过的IBM 集群技术资源汇总
sunxpa
新生入学
Rank: 1
注册用户



UID 178818
精华 0
积分 0(积分有什么用?)
帖子 2
阅读权限 10
注册 2007-1-11
状态 离线
发表于 2007-1-12 15:28  资料  个人空间  短消息  加为好友 
帮忙分析Linux IPv6 通讯代码

服务端程序如下:
$Av0M&d:M:Fwww.linuxeden.com#include <sys/types.h>#~/ki$CH4V
#include <sys/socket.h>
$^6G
DW~/?www.linuxeden.com
#include <sys/poll.h>uRU9hXGD)US
#include <sys/ipc.h>Linux伊甸园论坛'Vo&ek,sMo hC/I+a
#include <sys/ioctl.h>
"Z8e"av1V#include <sys/select.h>9H6\"h:AM n
qd

#include <sys/shm.h>
xH7OSP8z

#include <sys/un.h>www.linuxeden.comm
Q6}W(X*gi%i

#include <netinet/in.h>
1z?
vz;_
#include <arpa/inet.h>
{],spv-|#include <stdio.h>aKC2r$KVH
#include <unistd.h>*eR1y        P K,B        A`#|#M[
#include <stdlib.h>
CO3?Dj:s&Y#include <string.h>9f
`"W'O H

#include <errno.h>
'r0j+i0qJLwww.linuxeden.comint main (),u,~P?'@M6H
{
#A3^ [.m^6}/jT!U int sock,sockfd;!i        H|AoeR
unsigned char v6[16];
G T~:INW"p

struct sockaddr_in6 addr,servaddr;L/t+}.~^3N9C-QK
socklen_t fromlen;
%]B*M,CG2yo7h char packetbuffer[1024];
Qx w/rd^o int size;?t ty5DR0Z^t
size_t len;
Mi8O
l+N$a upm
// create socketswww.linuxeden.comh9E \}7l-X o

d7v)Mjms        |J0r3rLinux伊甸园论坛 sock = socket(PF_INET6,SOCK_DGRAM,0);
SvtO&|www.linuxeden.com if (sock == -1)
Hj!EXu!jV {.G/dy(@_ _k1o
  printf(" create socket error\n");Cgyx nQ d
h

  exit(-1);
II.XZ!z*om'luewww.linuxeden.com }
.h2z {]a{        u printf("Create socket 6 =%d\n",sock);Linux伊甸园论坛E1? u(G%y)V
// bind sockets
DfqH8s3c memset(&addr,0,sizeof(struct sockaddr_in6));
Y2bDhsK j&t*g
a
addr.sin6_family = AF_INET6;;CE#o;g I g)k(a|})Z
addr.sin6_port = htons(9000);
4Qg6zhK2Y3X6yQ~3cwww.linuxeden.com if (inet_pton (AF_INET6, "3ffe:321f::50a", &addr.sin6_addr) <= 0) {www.linuxeden.comCO)`-W E,b
  printf ("inet_pton error \n");
CIP j| `*t9lT  exit (3);
"} g"Qgk.{m+Rf }E|6i:k(BHPS
if (bind(sock,(struct sockaddr *)&addr,sizeof(addr)) != 0),kQ$}9ZV!Dz+g
{Linux伊甸园论坛VW+D4pMy%wsf
  printf("bind udp6 rtp error!\n");
%{b2PD\t-Y
g
  exit(-1);www.linuxeden.com r)N:kd.Hi:E2S
}
\ M.A3s` PS        OELinux伊甸园论坛 printf("Wait receive data ....\n");
OUC[1V\5`oPhFLinux伊甸园论坛 fromlen = sizeof( struct sockaddr_in6 );%i^ Wz:jX3m@(aYe
     //int rcvtimeo = 30000 ; // 45 sec insteadof 45 as default
` {1xdf{A~
B
     //setsockopt(sock, SOL_SOCKET , SO_RCVTIMEO , (const char *)&rcvtimeo , sizeof(rcvtimeo) );E b5p,vT yz&t
while(1)
W*H*}a$h8PI&a`

{Linux伊甸园论坛3] TH0u6Ju
  int recvlen=0;Linux伊甸园论坛2?k
J;CVk

  recvlen = recvfrom(sock,packetbuffer,1024,0,(struct sockaddr *)&servaddr,&fromlen);www.linuxeden.com#X%\ PDs0Mi-rH8_
  if ( recvlen <0 )
6[)Ljun*T0aLinux伊甸园论坛   continue;N#UK2|*U
  else/C @1G3a8R(jS
g T

  {
CG2c#n/S$n/l2p   printf("Receive msg>>%s\n",packetbuffer);k"O`DL![\]
   break;g
O}[+k@$e

  }
eD
e@"Nq pU
}
l8a;cqY0Zwww.linuxeden.com close(sock);
yzz8[IY@M;WLinux伊甸园论坛 return 0;
Jm6t9x:c)~ Hwww.linuxeden.com}
1b8[Z5f8~;a9dxU:n }W        J发送端程序如下:Linux伊甸园论坛8H0Mk:T8Es`b
#include <sys/types.h>
\.F c#_u#include <sys/socket.h>
9yb1ZV.hwww.linuxeden.com#include <sys/poll.h>JQ-o7N9P
#include <sys/ipc.h>
(AKaQ#e;c0K&Z,Bwww.linuxeden.com#include <sys/shm.h>[)Bn^3{o
Jw6w

#include <sys/un.h>www.linuxeden.como*Ur,C7m        m _)j
#include <netinet/in.h>www.linuxeden.com0P1PK/O#c_'X l
#include <arpa/inet.h>+J+f'N9R9mH|
#include <stdio.h>
-hg:g)k5ay0v#include <unistd.h>jD2Is8{.L9I
#include <stdlib.h>
G%`2W(S \JFO+b6uPK#include <string.h>Linux伊甸园论坛!ZpW"Q;h-W
#include <errno.h>
(P(O8p9p};Jhi-aint main ()zY5k$q
UJ^
~t[

{Linux伊甸园论坛EI?6}GS
int sockfd;
u)c"{L Tu struct sockaddr_in6 servaddr;Jx4tZF4~uB
printf("socket\n");8l1?7}4E{3D*Y1f
if ((sockfd = socket (AF_INET6, SOCK_DGRAM, 0)) < 0) {
"NNL$Xd\PLinux伊甸园论坛  perror ("socket");
lk e#ird#Bh
d8p'A/a
  exit (2);$@7X@
a.G8GZ

}2K6EIE\ Vmu
printf("sock=%d\n",sockfd);
q;KGH"OsLp/k{ bzero (&servaddr, sizeof (servaddr));        e jA0HI@{/c9x_
servaddr.sin6_family = AF_INET6;
d mh'~f,{"^I"`0Nwww.linuxeden.com servaddr.sin6_port = htons (8000);
t4j5b5\^#@ if (inet_pton (AF_INET6, "3ffe:321f::50a", &servaddr.sin6_addr) <= 0) {E,w+e9[+let
  printf ("inet_pton error\n");B+V-Dp2dR$v$r)xJ
  exit (3);
P"e,T0zQ:BSOCc }
l4w;cx_.J1O#o&jp        pLinux伊甸园论坛 if (bind (sockfd, (struct sockaddr *)&servaddr, sizeof (servaddr)) < 0)8kpcoPK,iG
  {
!x6Bf
v)I1Mj
U\Y
  perror ("bind");
3O        Lf{{UVt  exit (4);
w+WG
SGM%_8S}
}www.linuxeden.com-{
~T8VP+a*u

printf("sendto\n");kF/lWAB
sendto(sockfd, "123456789", 9, 0, (struct sockaddr *)&servaddr, sizeof(struct sockaddr_in6));@;X9v)Y(PzB
close (sockfd);%yL^S;Zc4JA0{
return 0;Linux伊甸园论坛8nkW;D*@%{
}

顶部
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 在线
发表于 2007-1-12 15:44  资料  个人空间  短消息  加为好友 
看地址格式似乎不象是标准的,前阵搞过 IPv6,似乎是f开头的。不过IPv6的地址结构是比较复杂,建议楼主研究一下。





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
不容错过的IBM 集群技术资源汇总
lelecool
新生入学
Rank: 1
注册用户



UID 148624
精华 0
积分 0(积分有什么用?)
帖子 3
阅读权限 10
注册 2006-1-28
状态 离线
发表于 2007-7-2 19:56  资料  个人空间  短消息  加为好友 
地址没有问题....

顶部
不容错过的IBM 集群技术资源汇总
Clerk_9919
小试牛刀
Rank: 2
注册用户



UID 599
精华 0
积分 1(积分有什么用?)
帖子 138
阅读权限 10
注册 2001-2-26
状态 离线
发表于 2007-7-9 13:28  资料  个人空间  短消息  加为好友 
可能是你的本地路由不正确,在你Ping的时候你可以指定接口所以可以Ping通,在代码重却没有所以不能收到数据。只要加上此IP使用哪个接口的静态路由就应该可以了。

顶部
Clerk_9919
小试牛刀
Rank: 2
注册用户



UID 599
精华 0
积分 1(积分有什么用?)
帖子 138
阅读权限 10
注册 2001-2-26
状态 离线
发表于 2007-7-9 13:33  资料  个人空间  短消息  加为好友 
你确认端口没有被占用么

顶部
 



当前时区 GMT+8, 现在时间是 2008-5-17 10:16

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.090675 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP