当前位置: 技术问答>linux和unix
编写的UNIX简单网络程序,但调了很久都不对,请高手帮我看看。谢谢!
来源: 互联网 发布时间:2016-10-04
本文导语: 编写UNIX网络程序,但调了很久都不对。请高手帮我看看 这里是用UDP的发一串字符回射到客户的服务器程序。。。 #include #include #include #include #include #include #include #include void dg_echo(int ); int main(int arg,char* argv[]){ struct socka...
编写UNIX网络程序,但调了很久都不对。请高手帮我看看
这里是用UDP的发一串字符回射到客户的服务器程序。。。
#include
#include
#include
#include
#include
#include
#include
#include
void dg_echo(int );
int main(int arg,char* argv[]){
struct sockaddr_in servaddr;
int sockfd;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(9877);
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
bind(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr));
dg_echo(sockfd);
}
void dg_echo(int sfd){
struct sockaddr_in cliaddr;
char buf[4096];
ssize_t n;
socklen_t len;
len=sizeof(cliaddr);
for( ; ;){
n=recvfrom(sfd,buf,4096,0,(struct sockaddr*)&cliaddr,&len);
sendto(sfd,buf,n,0,(struct sockaddr*)&cliaddr,sizeof(cliaddr));
}
}
这是里是客户程序:
#include
#include
#include
#include
#include
#include
#include
#include
void dg_cli(int ,struct sockaddr* );
void err_sys(char* );
int main(int argc, char* argv[]){
struct sockaddr_in servaddr;
int sockfd;
if(argc!=2)
err_sys("usage:");
sockfd=socket(AF_INET,SOCK_DGRAM,0);
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_port=htons(9877);
servaddr.sin_family=AF_INET;
inet_pton(AF_INET,argv[1],(struct sockaddr*)&servaddr,sizeof(servaddr));
dg_cli(sockfd,(struct sockaddr*)&servaddr);
}
void dg_cli(int sfd,struct sockaddr* servaddrp){
char sendline[4096],recvline[4096];
int n;
while(fgets(sendline,4096,stdin)!=NULL){
sendto(sfd,sendline,strlen(sendline),0,servaddrp,sizeof(servaddrp));
n=recvfrom(sfd,recvline,4096,0,NULL,NULL);
recvline[n]='';
fputs(recvline,stdout);
}
}
void err_sys(char* strp){
char buff[4096];
strcpy(buff,strp);
snprintf(buff+strlen(buff),4096-strlen(buff),": %s",strerror(errno));
strcat(buff,"n");
fputs(buff,stderr);
fflush(NULL);
exit (0);
}
|
获取错误码,用strerror打印错误信息,就好找问题了
|
客户端程序改两个地方
1、inet_pton(AF_INET,argv[1],(struct sockaddr*)&servaddr,sizeof(servaddr));
2、sendto(sfd,sendline,strlen(sendline),0,servaddrp,sizeof(servaddrp));
1、inet_pton(AF_INET,argv[1],(struct sockaddr*)&servaddr,sizeof(servaddr));
inet_pton(AF_INET,argv[1],&servaddr.sin_addr);
2、sendto(sfd,sendline,strlen(sendline),0,servaddrp,sizeof(servaddrp));
ret = sendto(sfd,sendline,strlen(sendline),0,servaddrp,sizeof(struct sockaddr));
if(ret == -1)
printf("%sn",strerror(errno));