- 論壇徽章:
- 0
|
兩段程序編譯通過,但運行時有問題,幫忙看一下。
運行時是不是正確
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
#define MAX_BUF_SIZE 1024
#define UDPSERVER_PORT 8003
void udp_server(int sockfd,struct sockaddr_in addr, unsigned int addrlen);
int main(int argc,char**argv)
{
int sockfd;
struct sockaddr_in serveraddr,clientaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
fprintf(stderr,"socket error\r\n" ;
exit(1);
}
bzero(&serveraddr,sizeof(serveraddr));
serveraddr.sin_family=AF_INET;
serveraddr.sin_addr.s_addr=htonl(INADDR_ANY);
serveraddr.sin_port=htons(UDPSERVER_PORT);
if(bind(sockfd,(struct sockaddr*)&serveraddr,sizeof(serveraddr))<0)
{
fprintf(stderr,"bind error\r\n" ;
exit(1);
}
udp_server(sockfd,clientaddr,sizeof(struct sockaddr));
close(sockfd);
}
void udp_server(int sockfd,struct sockaddr_in addr, unsigned int addrlen)
{
int n;
char recvmsg[MAX_BUF_SIZE];
addrlen=sizeof(struct sockaddr);
while(1)
{
n=recvfrom(sockfd,recvmsg,MAX_BUF_SIZE,0,(struct sockaddr*)&addr,NULL);
printf("received %s\n",recvmsg);
sendto(sockfd,recvmsg,n,0,(struct sockaddr *)&addr,addrlen);
}
}
客戶端
#include<stdio.h>
#include<sys/types.h>
#include<netinet/in.h>
#include<sys/socket.h>
#include<stdlib.h>
#include<string.h>
#define MAX_BUF_SIZE 1024
void udp_client(int sockfd,const struct sockaddr_in addr,unsigned int addrlen);
int main(int argc,char **argv)
{
int sockfd;
unsigned int addrlen;
struct sockaddr_in clientaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
if(sockfd<0)
{
fprintf(stderr,"socket error\r\n" ;
exit(1);
}
bzero(&clientaddr,sizeof(clientaddr));
clientaddr.sin_family=AF_INET;
clientaddr.sin_port=htons(8003);
inet_aton(argv[1],&clientaddr.sin_addr);
addrlen=sizeof(clientaddr);
udp_client(sockfd,clientaddr,addrlen);
close(sockfd);
}
void udp_client(int sockfd,const struct sockaddr_in addr,unsigned int addrlen)
{
int n;
char buf[MAX_BUF_SIZE];
for(;fgets(buf,MAX_BUF_SIZE,stdin)!=NULL
{
sendto(sockfd,buf,strlen(buf),0,(struct sockaddr*)&addr,addrlen);
addrlen=sizeof(struct sockaddr);
n=recvfrom(sockfd,buf,MAX_BUF_SIZE,0,(struct sockaddr*)&addr,&addrlen);
buf[n]='\0';
fputs(buf,stdout);
}
}
[ 本帖最后由 iunotellu 于 2007-3-8 16:17 編輯 ] |
|