服务端:
( 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: ^! ~
小弟初学网络编程,还请各位大牛指教.