socket编程 总是accept error 新手入门 希望大家帮帮忙 具体代码如下
这个程序是想实现客户机发送256个字符,服务器将这256个字符顺序颠倒然后返回
server.c
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <netinet/in.h>
#include <sys/socket.h>
#include <signal.h>
#define SERVER_PORT 8086
#define BACKLOG 5
void serv_respon(int sockfd)
{
int nbytes;
char buf_send[1024];
char buf_recv[1024];
nbytes=read(sockfd,buf_recv,256);
if(nbytes==0)
{
return;
}
else if(nbytes<0)
{
fprintf(stderr,"read error");
exit(1);
}
char*pc_recv=buf_recv+255;
char*pc_send=buf_send;
int i;
for(i=0;i<256;i++)
{
*pc_send=*pc_recv;
pc_send++;
pc_recv--;
}
nbytes=write(sockfd,buf_send,256);
if(nbytes<0)
{
fprintf(stderr,"write error");
exit(1);
}
}
int main( )
{
int listenfd,connfd,addrlen;
struct sockaddr_in servaddr,clientaddr;
listenfd=socket(AF_INET,SOCK_STREAM,0);
if(listenfd<0)
{
fprintf(stderr,"socket error");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
servaddr.sin_port=htons(SERVER_PORT);
if(bind(listenfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
fprintf(stderr,"bind error");
exit(1);
}
addrlen = sizeof(servaddr);
for(;;)
{
connfd=accept(listenfd,(struct sockaddr*)&clientaddr,&addrlen);
if(connfd == -1)
{
fprintf(stderr,"accept error");
exit(1);
}
serv_respon(connfd);
close(connfd);
}
close(listenfd);
}
client.c
#include <stdlib.h>
#include <time.h>
#include <sys/socket.h>
#include <string.h>
#include <stdio.h>
#include <netinet/in.h>
#include <signal.h>
#define SERVER_PORT 8086
void cli_requ(int sockfd)
{
char buf[1024];
int i,n;
srand((unsigned)time(NULL));
for(i=0;i<256;i++)
{
buf[i]=random()%(256);
}
int nbytes=write(sockfd,buf,256);
if(nbytes<0)
{
fprintf(stderr,"write error");
exit(1);
}
nbytes=read(sockfd,buf,512);
if(nbytes<0||nbytes==0)
{
fprintf(stderr,"read error");
exit(1);
}
}
int main( )
{
int sockfd;
struct sockaddr_in servaddr;
sockfd=socket(AF_INET,SOCK_STREAM,0);
if(sockfd<0)
{
fprintf(stderr,"socket error");
exit(1);
}
bzero(&servaddr,sizeof(servaddr));
servaddr.sin_family=AF_INET;
servaddr.sin_port=htons(SERVER_PORT);
if(inet_aton("127.0.0.1",&servaddr.sin_addr.s_addr)==-1)
{
fprintf(stderr,"addr convert error");
exit(1);
}
if(connect(sockfd,(struct sockaddr*)&servaddr,sizeof(servaddr))==-1)
{
fprintf(stderr,"connect error");
exit(1);
}
cli_requ(sockfd);
close(sockfd);
}
[解决办法]
servaddr.sin_addr.s_addr=htonl(INADDR_ANY);
改成:
servaddr.sin_addr.s_addr=INADDR_ANY;
htonl是把端口号改成大端模式的,这接收的是ip地址,不答界的
[解决办法]
你这是基于tcp的服务器端bind函数之后还要listen()才能用accept()。
[解决办法]