简单的UDP回射程序

Server:

 
  
#include < stdio.h >
#include
< string .h >
#include
< arpa / inet.h >
#include
< netinet / in .h >
#include
< sys / socket.h >
#define MAXSIZE 1024
#define SERV_PORT 2000
void dg_echo( int sockfd, struct sockaddr * pcliaddr, socklen_t clilen)
{
int n;
socklen_t len;
while ( 1 )
{
char mesg[MAXSIZE];
// 回射机制
len = clilen;
n
= recvfrom(sockfd,mesg,MAXSIZE, 0 ,pcliaddr, & len);
char servermsg[MAXSIZE] = " From Server: " ;
int l = strlen(servermsg);
servermsg[l]
= ' \0 ' ;
strcat(servermsg,mesg);
sendto(sockfd,servermsg,n
+ l, 0 ,pcliaddr,len);
}
}
int main( int args, char ** argv)
{
int sockfd;
struct sockaddr_in serveraddr, clientaddr;
sockfd
= socket(AF_INET,SOCK_DGRAM, 0 );
bzero(
& serveraddr, sizeof (serveraddr));
serveraddr.sin_family
= AF_INET;
serveraddr.sin_addr.s_addr
= htonl(INADDR_ANY);
serveraddr.sin_port
= htons(SERV_PORT);
bind(sockfd,(
struct sockaddr * ) & serveraddr, sizeof (serveraddr));
dg_echo(sockfd,(
struct sockaddr * ) & serveraddr, sizeof (clientaddr));
return 0 ;
}

Client:

 
  
#include < stdio.h >
#include
< string .h >
#include
< arpa / inet.h >
#include
< netinet / in .h >
#include
< sys / socket.h >
#define MAXSIZE 1024
#define SERVER_PORT 2000
void dg_client (FILE * fp, int sockfd, const struct sockaddr * pservaddr,socklen_t serverlen)
{
int n;
char sendline[MAXSIZE],recvline[MAXSIZE + 1 ];
printf(
" From Client: " );
while (fgets(sendline,MAXSIZE,fp) != NULL)
{
sendto(sockfd,sendline,strlen(sendline),
0 ,pservaddr,serverlen);
n
= recvfrom(sockfd,recvline,MAXSIZE, 0 ,NULL,NULL);
recvline[n]
= ' \0 ' ;
fputs(recvline,stdout);
printf(
" From Client: " );
}
}
int main ( int args, char ** argv )
{
int sockfd;
struct sockaddr_in serveraddr;
bzero(
& serveraddr, sizeof (serveraddr));

serveraddr.sin_family
= AF_INET;
serveraddr.sin_port
= htons(SERVER_PORT);
inet_pton(AF_INET,
" 10.3.1.215 " , & serveraddr.sin_addr);
sockfd
= socket(AF_INET,SOCK_DGRAM, 0 );
dg_client(stdin,sockfd,(
struct sockaddr * ) & serveraddr, sizeof (serveraddr));
return 0 ;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值