首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

服务器端总是退出的有关问题,有关问题位置已找到

2012-02-13 
服务器端总是退出的问题,问题位置已找到问题位置已找到,就是不知道该怎么改,哪位帮个忙谢谢了?#includest

服务器端总是退出的问题,问题位置已找到
问题位置已找到,就是不知道该怎么改,哪位帮个忙谢谢了?
#include   <stdio.h>
#include   <stdlib.h>
#include   <errno.h>
#include   <string.h>
#include   <sys/types.h>
#include   <netinet/in.h>
#include   <sys/socket.h>
#include   <sys/wait.h>
#include   <netdb.h>
#include   <signal.h>
#define   PORT   15000
#define   BACKLOG   10

int   main(int   argc,   char   *argv[])
{
int     sock_id;
int     opt;
int     n;
int     newfd;
int     sockfd;
int     sin_size;
char   buf[1024];
struct   sockaddr_in   my_addr;
struct   sockaddr_in   their_addr;
sock_id   =   socket(AF_INET,   SOCK_STREAM,   0);
if(sock_id   ==   -1)   //创建套接字
{
perror( "socket   没有成功 ");
exit(1);
}
printf( "socket   is   [%d]\n ",   sock_id);
bzero(&(my_addr),   sizeof(my_addr));
my_addr.sin_family   =   AF_INET;
my_addr.sin_port   =   htons(PORT);
my_addr.sin_addr.s_addr   =   INADDR_ANY;

opt=1;
        setsockopt(sock_id,   SOL_SOCKET,   SO_REUSEADDR,   (void*)&opt,   sizeof(int));

n   =   bind(sock_id,   (struct   sockaddr*)&my_addr,   sizeof(struct   sockaddr));
if(n   ==   -1)//绑定地址
{
printf( "error   socket   is   [%d]\n ",   sock_id);
perror( "bind   没有成功 ");
exit(1);
}
n   =   listen(sock_id,   BACKLOG);
if(n   ==   -1)   //宣告可接受连接
{
perror( "listen没有成功 ");
exit(1);
}
while(1)
{
sin_size   =   sizeof(struct   sockaddr_in);
newfd   =   accept(sock_id,(struct   sockaddr*)&their_addr,&sin_size);
if(newfd   ==   -1)
{
if(errno   ==   EINTR)
{
continue;
}
perror( "accept没有成功 ");
continue;
}
printf( "server:   got   connection   from   %s   \n ",   inet_ntoa(their_addr.sin_addr));
n   =   read(sockfd,   buf,   sizeof(buf));
printf( "程序执行检查点   1 ");fflush(NULL);
if(n   <   0)
{
printf( "程序执行检查点   2 ");fflush(NULL);
break;   //就在这里跳出循环了,连接一成功,n的值就小于〇了
}
else   if   (n   ==   0)
{
printf( "客户端已经退出了\n ");
break;
}
else
{
printf( "服务器接受的消息为   %s\n ",   buf);
if(buf   ==   "aaa ")
{
write(sockfd, "您选择了求平方和运算,请输入两个数字: ",n);

}
write(sockfd,   buf,   n);
}
}
close(sockfd);
}


[解决办法]
接分啦 自己能搞定问题才是最佳方式
[解决办法]
恭喜,恭喜
[解决办法]

up
[解决办法]
:)
------解决方案--------------------


jf
[解决办法]
恭喜
[解决办法]
恭喜
[解决办法]
jf
[解决办法]
忽忽
[解决办法]
我觉得该服务器在同一时间只能面对一个客户端服务,也就是一个客户端的业务没有处理完,别的客户端是连不进来的,在实际应用中只面对单客户端的服务器应该不多,如果你想改进,可以在这方面加深一下。实现多客户用多进程和多线程都可以。

热点排行