socket编程的问题,为什么运行失败呢?
server端:
client端:
为什么运行client端程序时会报内存错误呢?运行方式为 ./client <hostname>
有什么问题吗?
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <memory>
#include <arpa/inet.h>
#include "error.h"
int main()
{
int sockfd,client_fd;/*sockfd: monitor socket; client_fd:data transmission socket*/
struct sockaddr_in my_addr;/*local host address message*/
struct sockaddr_in remote_addr;/*client address message*/
int ret;
do
{
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
ret=SOCKER_GREAT_ERROR;
break;
}
my_addr.sin_family=AF_INET;
my_addr.sin_port=htons(SERVERPORT);
my_addr.sin_addr.s_addr = INADDR_ANY;
memset(my_addr.sin_zero,0,sizeof(my_addr.sin_zero));
if(bind(sockfd,(struct sockaddr*)&my_addr,sizeof(struct sockaddr))==-1)
{
ret=BIND_ERROR;
break;
}
if(listen(sockfd,BACKLOG)==-1)
{
ret=LISTEN_ERROR;
break;
}
while(1)
{
socklen_t sin_size=sizeof(struct sockaddr);
if((client_fd=accept(sockfd,(struct sockaddr*)&remote_addr,&sin_size))==-1)
{
ret=ACCEPT_ERROR;
break;
}
printf("received a connection from %s\n", inet_ntoa(remote_addr.sin_addr));
if (!fork())
{
if (send(client_fd, "Hello, you are connected!\n", 26, 0) == -1)
{
ret=SEND_ERROR;
}
close(client_fd);
exit(0);
}
}
}while(0);
if(0!=ret)
printf("run error with %d\n",ret);
return ret;
}
client端:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <sys/types.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <memory>
#include <arpa/inet.h>
#include "error.h"
#include <netdb.h>
int main(int argc,char *argv[])
{
int ret;
do
{
int sockfd,recvdytes;
char buf[MAXDATASIZE];
hostent *host;
struct sockaddr_in serv_add;
if (argc < 2)
{
printf("Please enter the server's hostname!\n");
ret=ERROR_PARA;
break;
}
if((host=gethostbyname(argv[1]))=NULL)
{
ret=ERROR_GETHOSTNAME;
break;
}
if((sockfd=socket(AF_INET,SOCK_STREAM,0))==-1)
{
ret=SOCKER_GREAT_ERROR;
break;
}
serv_add.sin_family=AF_INET;
serv_add.sin_port=htons(SERVERPORT);
serv_add.sin_addr = *((struct in_addr *)host->h_addr);
memset(serv_add.sin_zero,0,sizeof(serv_add.sin_zero));
if(connect(sockfd,(struct sockaddr*)&serv_add,sizeof(struct sockaddr))==-1)
{
ret=CONNECT_ERROR;
break;
}
if(recvdytes=recv(sockfd,buf,MAXDATASIZE,0)==-1)
{
ret=RECV_ERROR;
break;
}
buf[recvdytes]='\0';
printf("recvytes=%s",buf);
close(sockfd);
}while(0);
printf("run error with %d\n",ret);
return ret;
}
为什么运行client端程序时会报内存错误呢?运行方式为 ./client <hostname>
有什么问题吗?
...全文


