-2

程序没有错误,但我无法执行它显示分段错误的程序任何人都可以说出在 linux 和 sun sollaris 中执行客户端服务器程序的语法。

4

1 回答 1

1

我有一个非常简单的 UDP 客户端-服务器程序,它在我的 Ubuntu 机器上运行良好。这是一个非常小的程序,没有错误检查和预防措施,绝对不是编写方式。服务器代码:


#define MAXLINE 255
#define MYPORT 9100
int main()
{
int listenfd,msglen,clientlen;
char buff[MAXLINE];
struct sockaddr_in servaddr,client;
listenfd=socket(AF_INET,SOCK_DGRAM,0);
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=INADDR_ANY;
servaddr.sin_port=htons(MYPORT);
bind(listenfd,(struct sockaddr *)&servaddr,sizeof(servaddr));
clientlen=sizeof(client);
printf("Server is listening");
while(1)
{
msglen=recvfrom(listenfd,buff,100,0,(struct sockaddr *)&client,&clientlen);
buff[msglen]='\0';
sendto(listenfd,buff,msglen,0,(struct   sockaddr*)&client,clientlen);
}
}

客户端代码:


#define MAXLINE 255
#define SERV_PORT 9100
#define SA struct sockaddr
int main()
{
char send[100],recv[100];
int sockfd,len;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_DGRAM,0);
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERV_PORT);
inet_pton(AF_INET,"127.0.0.1",&servaddr.sin_addr);
memset((&servaddr.sin_zero),'\0',8);
while(1)
{
printf("Type your message:");
fgets(send,100,stdin);
sendto(sockfd,send,strlen(send),0,(SA*) &servaddr,sizeof(servaddr));
if((len=recvfrom(sockfd,recv,100,0,(SA*)NULL,NULL))>0)
{
recv[len]='\0';
printf("Server echo:%s\n",recv);
}
}
close(sockfd);
}

包括必要的头文件。sys/types.h sys/socket.h netinet/in.h stdlib.h stdio.h

于 2011-03-03T16:32:56.583 回答