当前位置: 技术问答>linux和unix
linux socket编程问题,下面是我做的一个简单的模拟银行排队叫号系统。
来源: 互联网 发布时间:2017-02-08
本文导语: 程序运行:开启多个终端,一个服务器,其余的是客户端(包括一个取号机和多个柜台叫号机) 问题:我把服务器和多个客户端程序可以正常运行,但当我按 ctr+c 键杀掉一个客户端后,服务器端的程序也会死掉, ...
程序运行:开启多个终端,一个服务器,其余的是客户端(包括一个取号机和多个柜台叫号机)
问题:我把服务器和多个客户端程序可以正常运行,但当我按 ctr+c 键杀掉一个客户端后,服务器端的程序也会死掉,
请问怎样才能使 杀死客户端程序 而不使服务器端程序死掉? 要怎样修改程序,请高手指教。
下面是我的源程序:
服务器 server.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 定义端口号,须大于1024 */
#define PORT 8888
//#define BUF_SIZE 1024
/* 信息宏 */
#define GEN_GOTAL 1 /* 普通业务总人数 */
#define GEN_CUR 2 /* 普通业务当前服务的号码 */
#define VIP_TOTAL 3 /* vip业务总人数 */
#define VIP_CUR 4 /* vip业务当前服务的号码 */
#define FROM_GET_NUM 5 /* 为取号机创建线程 */
#define FROM_CALL_NUM 6 /* 为叫号机创建线程 */
/* 存储服务人数信息结构定义 */
typedef struct
{
int gen_total_num; /* 普通业务总人数 */
int gen_cur_num; /* 普通业务当前服务的号码 */
int vip_total_num; /* vip业务总人数 */
int vip_cur_num; /* vip业务当前服务的号码 */
}info_bank;
info_bank info_people;
/* 线程执行函数负责读写 */
void *server_client( void *arg );
/* 初始化服务信息 */
void init_info(info_bank *info_people);
void save_info_getnum(info_bank *info_people, int operation); /*保存取号机发来的信息*/
void save_info_call(info_bank *info_people, int operation); /*保存叫号机发来的信息*/
int main(int argc, char *argv[])
{
socklen_t clt_addr_len;
int listen_fd;
int com_fd;
int ret;
int i;
static char recv_buf;
int len;
pthread_t tid;
struct sockaddr_in clt_addr;
struct sockaddr_in srv_addr;
init_info(&info_people);
/* 创建套接字用于服务器的监听 */
listen_fd = socket(PF_INET, SOCK_STREAM, 0);
if (listen_fd
问题:我把服务器和多个客户端程序可以正常运行,但当我按 ctr+c 键杀掉一个客户端后,服务器端的程序也会死掉,
请问怎样才能使 杀死客户端程序 而不使服务器端程序死掉? 要怎样修改程序,请高手指教。
下面是我的源程序:
服务器 server.c
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
/* 定义端口号,须大于1024 */
#define PORT 8888
//#define BUF_SIZE 1024
/* 信息宏 */
#define GEN_GOTAL 1 /* 普通业务总人数 */
#define GEN_CUR 2 /* 普通业务当前服务的号码 */
#define VIP_TOTAL 3 /* vip业务总人数 */
#define VIP_CUR 4 /* vip业务当前服务的号码 */
#define FROM_GET_NUM 5 /* 为取号机创建线程 */
#define FROM_CALL_NUM 6 /* 为叫号机创建线程 */
/* 存储服务人数信息结构定义 */
typedef struct
{
int gen_total_num; /* 普通业务总人数 */
int gen_cur_num; /* 普通业务当前服务的号码 */
int vip_total_num; /* vip业务总人数 */
int vip_cur_num; /* vip业务当前服务的号码 */
}info_bank;
info_bank info_people;
/* 线程执行函数负责读写 */
void *server_client( void *arg );
/* 初始化服务信息 */
void init_info(info_bank *info_people);
void save_info_getnum(info_bank *info_people, int operation); /*保存取号机发来的信息*/
void save_info_call(info_bank *info_people, int operation); /*保存叫号机发来的信息*/
int main(int argc, char *argv[])
{
socklen_t clt_addr_len;
int listen_fd;
int com_fd;
int ret;
int i;
static char recv_buf;
int len;
pthread_t tid;
struct sockaddr_in clt_addr;
struct sockaddr_in srv_addr;
init_info(&info_people);
/* 创建套接字用于服务器的监听 */
listen_fd = socket(PF_INET, SOCK_STREAM, 0);
if (listen_fd