这是一个简单的UDP的实例而已~
//!> server
//!> server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#define
SERV_PORT
6000
#define
MAXLINE
1024
int main( int argc, char ** argv )
{
char
recv[MAXLINE];
int
listenfd,connfd;
int
chilen, len,i;
int
nread;
structsockaddr_in servaddr, chiaddr;
//!> establish the socket
//!>
if( (listenfd = socket(
AF_INET, SOCK_DGRAM,0
) ) == -1 )
{
printf("Socket error.. %d\n", errno);
exit(EXIT_FAILURE );
}
//!>
//!> write info
bzero(&servaddr, sizeof( servaddr ) );
servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr
=htonl( INADDR_ANY);
servaddr.sin_port = htons( SERV_PORT );
//!>
//!> bind
if( bind(listenfd, ( struct sockaddr * )&servaddr, sizeof(servaddr ) ) == -1 )
{
printf("Binderror... %d\n", errno);
exit(EXIT_FAILURE );
}
while( 1)
{
chilen =sizeof( chiaddr );
memset( recv, 0, sizeof( recv ) );
nread =recvfrom(connfd,recv, MAXLINE, 0, (struct sockaddr*)&chiaddr, &chilen);//read(connfd, recv, MAXLINE );
//!> 记住:一般都用它
if( nread ==-1 )
{
continue;
printf("Readerror ... %d\n", errno);
close(connfd );
exit(EXIT_FAILURE );
}
else if(nread == 0 )
{
printf("Haveno data..\n");
continue;
//!> return
}
else
{
len =sizeof( recv );
recv[len] ='\0';
printf("Server get from client : %s\n", recv);
i = 0;
while(recv[i] )
//!> 此处是一个简单的处理,将小写字母改成大写回送
{
recv[i] =toupper( recv[i] );
i++;
}
sendto(connfd, recv, strlen( recv ), 0, (struct sockaddr*)&chiaddr, chilen);
//!> send to client
}
}
return0;
}
/ /!> client
//!>client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
#define
SERV_PORT
6000
#define
MAXLINE
1024
int main( int argc, char ** argv )
{
char
recv[MAXLINE];
int
connfd;
int
nread;
int
len;
structsockaddr_in servaddr;
if( argc !=2 )
{
printf("Please input the server's IP only !");
exit(EXIT_FAILURE );
}
//!>
//!> socket
if( ( connfd= socket(
AF_INET, SOCK_DGRAM,0
) ) == -1 )
{
printf("Socket error.. %d\n", errno);
exit(EXIT_FAILURE );
}
//!>
//!> info
bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
inet_pton(AF_INET, argv[1] ,&servaddr.sin_addr);
while( 1)
{
//write(connfd, "hello\n", 7 );
memset(recv, 0, sizeof( recv ) );
sendto(connfd, "hello\n", 7, 0, (struct sockaddr*)&servaddr, sizeof(servaddr));
printf("Client send : hello\n");
sleep( 2);
len =sizeof( servaddr );
nread =recvfrom(connfd, recv, MAXLINE, 0, (struct sockaddr*)&servaddr, &len);//read( connfd,recv, MAXLINE );
if( nread ==-1 )
{
printf("Readerror.. %d\n", errno);
exit(EXIT_FAILURE );
}
else if(nread == 0 )
{
continue;
}
else
{
len =strlen( recv );
recv[len] ='\0';
printf("Client get from server : %s\n", recv);
}
}
close(connfd );
return0;
}
//!> server
//!> server.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <netinet/in.h>
#define
#define
int main( int argc, char ** argv )
{
}
/ /!> client
//!>client.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
#define
#define
int main( int argc, char ** argv )
{
}