发新话题
打印

【求助】socket网络编成时,UDP/IP协议广播

【求助】socket网络编成时,UDP/IP协议广播

服务端:( t5 ?+ K; B* F) |* H( L
#include <sys/types.h> / K" O, ~' J6 K+ I3 t
#include <sys/socket.h> * O! J# E8 f8 q) I
#include <netinet/in.h>8 V! G1 d1 b* k5 w: X
#include <string.h>
1 g0 x' h% G4 t9 }#include <stdio.h> , v+ {: Z. r" w0 o9 q

: Y% j6 p1 `- K* d#define  SERVER_PORT    8888 & @* Q+ @3 f( z5 X0 V
#define  DATASIZE              100
% p- ?9 B% f) o5 I9 C4 c   ]5 I& }3 g+ O0 {  W" E* A3 F# y
void udps_respon(int sockfd) 0 g4 ~& ~& f% I3 e/ S
{ ' K+ g+ H: m# p4 H; {
  int                 n;
% s, \5 G" E, Q5 n; `# r; W  int                  addrlen;
4 P' E& i7 s$ ]4 H2 V  char                recvbuf[DATASIZE];# l& t" i3 n9 F+ r# v+ A/ u1 q2 e3 F
  char*               sendbuf;5 D( P0 e6 _1 \; w/ D  i. x
  char*               client_ip;8 e( P  l/ }, h: d7 F
  struct sockaddr_in  client_addr; - t0 y, _5 ~, y: c, R6 ^% }, U
   
; Y9 M: W0 b1 n* a0 E  n=recvfrom(sockfd,recvbuf,DATASIZE,0,(struct sockaddr*)&client_addr,&addrlen); 2 e$ t) {6 \: L2 W1 M
  recvbuf[n]='\0'; & U# U6 F4 C. l8 X
  client_ip=inet_ntoa(client_addr.sin_addr);2 \, F, {* c8 h
  printf("I recieved data from:'%s'.\n",client_ip);
: G/ j* J1 n- V% J6 ?4 F# k9 g  printf("I have received '%s'.\n",recvbuf); + P8 `- j4 c6 O5 a# b
  sendbuf="OK! You did a good job!!";
- G; r) m  [" g6 ]8 o/ B1 R0 o  n=strlen(sendbuf);% _# j2 C  D0 p$ m' @; X9 ^+ U
  sendto(sockfd,sendbuf,n,0,(struct sockaddr*)&client_addr,addrlen); 1 k8 d0 c; y5 t
}5 R. f( W, ]6 [0 |; g! q
" r$ x9 ~- J1 j+ L/ I- s/ {
int main(void)
' [6 w  k  m5 e) D5 X, u{ & [4 F( ?( V. P( b- j) B5 U
  int                  sockfd;
. L$ ^! m( ~  k2 L8 z# S9 e  struct sockaddr_in   server_addr; $ `$ h1 f/ ?, C; o* @7 s
  if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
5 T8 D/ ~! O, `( H    { " h4 P! a% @6 O2 C6 \. Z
      printf("Socket Error.\n");
/ D4 s: v6 j  R      exit(1);
  I( x3 ~: o0 p- A    }
5 S7 C* _4 ^2 `1 y( l7 x2 M  bzero(&server_addr,sizeof(struct sockaddr_in));
( a7 I2 l3 M3 P  server_addr.sin_family=AF_INET; # }7 h. Q9 j8 y: d+ n
  server_addr.sin_addr.s_addr=htonl(INADDR_ANY);
: m+ o8 j# @- k2 p( F  server_addr.sin_port=htons(SERVER_PORT);
4 X( f* ^6 o, ?  if(bind(sockfd,(struct sockaddr *)&server_addr,sizeof(struct sockaddr_in))<0 ) " R+ O" u8 L1 M! c4 m7 S
    {
- C3 t3 x" H' W      printf("Bind Error.\n");
, W. ^/ i* |& I      exit(1); 9 U" G$ O7 I1 ^! g
    }
# ?6 I8 v$ Z" ^0 e% O! D0 Y . B. U$ u- `! O# T2 t) M1 |5 A
  udps_respon(sockfd); ' q4 m5 X, p4 m- a8 k6 C
  close(sockfd);
  }8 u3 K* u. u; K0 z} 2 a0 t3 B' b7 e

9 K. b, J. e1 M1 e$ { + }! {6 L0 ~. d  ?& [* p+ a' v! O
客户端:7 ]2 D* ~* r( r3 b" T+ i+ O
#include <sys/types.h> 2 {) w6 p6 l- o# v" ?
#include <sys/socket.h> 3 p4 e3 ~9 M- Q/ B! I( l  h
#include <netinet/in.h> 9 K1 ?6 {& ^, i9 S
#include <string.h>
+ Z& Y  F4 i, Z; H  N3 G#include <stdio.h> / t% k1 X+ P8 m+ q
#include <unistd.h> 6 x! P" c* @( D  j2 r) T; L2 k. }
5 }3 @8 `) s* W3 D" L# @0 e
#define  IPADDR          "255.255.255.255"
  b* j) G' ~9 k. @#define  PORT              8888
' l+ _( J6 h4 L1 m0 ~  }#define  DATASIZE       100    _& W8 b/ t0 M+ \5 R

+ o; x% Y- a) o* @void udpc_requ(int sockfd,const struct sockaddr_in *server_addr,int addrlen) ( d3 c$ n! g3 u, |3 F  N) X6 C
{
+ \- k* h. E* O/ u' s& `6 p$ ~  int                 n;0 R" |" Q1 L$ E: o
  int                 server_addrlen;
3 w+ u! \' N$ G" Y$ [; \  z  char                sendbuf[DATASIZE];
8 ?" W: L, v9 P; A" e& U( A  char                recvbuf[DATASIZE];
1 ~, u' f" x+ e* U$ Y  char*               server_ip; 2 I# ]+ \  q3 |& K0 T/ E9 c
  struct sockaddr_in  server;! J4 z8 b, N6 M* u

2 k" x( `' T: ]1 U+ K5 K3 H# @  printf("lease input string:");
* S2 j1 D% y  K1 Z7 h4 b  fgets(sendbuf,DATASIZE,stdin);
4 c+ e# [9 O& Y- E1 p3 G  sendto(sockfd,sendbuf,strlen(sendbuf)-1,0,server_addr,addrlen);
- o) l$ `  D2 [  printf("I have send: %s",sendbuf);
3 d7 m2 P, y* g: H# `  [  n=recvfrom(sockfd,recvbuf,DATASIZE,0,(struct sockaddr *)&server,&server_addrlen);
: V' F: d. O" E) z) v- J  recvbuf[n]='\0';
1 a5 P+ d$ [4 L4 G  server_ip=inet_ntoa(server.sin_addr);1 S) w5 f; D0 d! m! @; V# a7 A; B
  printf("I have recieved data from:%s.\n",server_ip); * K/ v% a' Z- i0 k4 q+ {/ @
  printf("I have recieved:'%s'.\n",recvbuf); : }  \3 K9 S7 l. \8 r
}/ y" z6 n' }' \  {" H' M

# k1 r0 w9 ^5 _# Sint main()
  @1 s; g! z% B: O! d, E{ ) R' Q$ Q  r3 i8 x$ B  Y% D
  int                 sockfd; 4 k. _+ C" L% s; G
  struct sockaddr_in  addr;
& y( A9 m6 F% t) N, \8 p  if((sockfd=socket(AF_INET,SOCK_DGRAM,0))<0)
4 w- s5 w. {/ r) \    {
6 \$ H7 n! [2 H      printf("Socket Error.\n");
3 l7 K* O6 f8 ?      exit(1); * [" O; x) z) Z
    }
# o0 Z6 q+ {. i3 Y  : Q6 J. D' c# I. S% B
  bzero(&addr,sizeof(struct sockaddr_in));; b0 T  {0 S. _" J
  addr.sin_family=AF_INET;
! p! u( C" ^8 R2 O  addr.sin_port=htons(PORT);
- E* o2 o8 s+ B+ v6 Z0 J/ V  if(inet_aton(IPADDR,&addr.sin_addr)<0)
" P0 A0 ?0 N- f2 {2 `( q    {
; m0 z- t4 S0 K0 A+ r9 f+ B. |      printf("IPADDR error.\n");
+ o$ j' U3 V( [/ ^/ {2 o5 v      exit(1);% E+ F7 E8 Q- ]
    }   l! [: w0 Y  z  z
  udpc_requ(sockfd,&addr,sizeof(struct sockaddr_in));9 X, x" X' K3 M% q, N
  close(sockfd);% z. W# [" S2 D: c8 k9 H0 {# b
}
1 e0 H$ M7 I. n+ D/ n1 ]8 z4 @7 `
! e+ \2 H+ `+ [/ a* s: y****************************************************************************************************! T9 X2 V' R' d/ [0 P0 o; m
客户端定义发送消息的ip地址为:255.255.255.255 广播地址,为什么服务端收不到信号?. R. l' ?/ M8 n2 w+ i' C: ^! ~
小弟初学网络编程,还请各位大牛指教.      

TOP

You should open setsockopt( ) to make the sock_api support the broadcasting.      

TOP

发新话题