⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mjgps.c

📁 我搜集到的一个java常用类库的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* * Server  */#include <stdio.h>#include <signal.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <arpa/inet.h>#include <sys/time.h>#include <sys/stat.h>#include <sys/resource.h>#include <string.h>#include <netdb.h>#include <sys/errno.h>#include <termio.h>#include <fcntl.h>#include <sys/param.h>#include <sys/file.h>#include <pwd.h>#include <ctype.h>#include <unistd.h>#include "mjgps.h"/* * Global variables  */int timeup = 0;extern int errno;fd_set rfds, afds;int login_limit;char gps_ip[20];int gps_port;int log_level;char number_map[20][5]={"0", "1", "2", "3", "4", "5", "6", "7", "8", "9"};int gps_sockfd;char climark[30];struct player_info player[MAX_PLAYER];struct player_record record;struct record_index_type record_index;FILE *fp, *log_fp;struct ask_mode_info ask;struct rlimit fd_limit;interr (char *errmsg){/*    if ((log_fp = fopen (LOG_FILE, "a")) == NULL)    {	printf ("Cannot open logfile\n");	return -1;    }    printf ("%s", errmsg);    if (log_level == 0)	fprintf (log_fp, "%s", errmsg);    log_level = 0;    fclose (log_fp);*/  }intread_msg (int fd, char *msg){    int n;    char msg_buf[255];    int read_code;    n = 0;    if (Check_for_data (fd) == 0)    {	err ("WRONG READ\n");	return 2;    }    timeup = 0;    alarm (3);    do    {      recheck:;	read_code = read (fd, msg, 1);	if (read_code == -1)	{	    if (errno != EWOULDBLOCK)	    {		alarm (0);		return 0;	    }	    else if (timeup)	    {		alarm (0);		err ("TIME UP!\n");		return 0;	    }	    else		goto recheck;	}	else if (read_code == 0)	{	    alarm (0);	    return 0;	}	else	{	    n++;	}	if (n > 79)	{	    alarm (0);	    return 0;	}    }    while (*msg++ != '\0');    alarm (0);    return 1;/* * n=read(fd,msg_buf,80); * printf("-%d- ",n); * if(n<=0) * return 0; * else * { * printf("(%d)",strlen(msg_buf)); * msg_buf[n]=0; * printf("%d %d %s\n",n,strlen(msg_buf),msg_buf); * strcpy(msg,msg_buf); * return 1; * } */}voidwrite_msg (int fd, char *msg){    int n;    n = strlen (msg);    if (write (fd, msg, n) < 0)    {	close (fd);	FD_CLR (fd, &afds);    }    if (write (fd, msg + n, 1) < 0)    {	close (fd);	FD_CLR (fd, &afds);    }}voiddisplay_msg (int player_id, char *msg){    char msg_buf[255];    sprintf (msg_buf, "101%s", msg);    write_msg (player[player_id].sockfd, msg_buf);}intCheck_for_data (int fd)/* * Checks the socket descriptor fd to see if any incoming data has * arrived.  If yes, then returns 1.  If no, then returns 0. * If an error, returns -1 and stores the error message in socket_error. */{    int status;			/* return code from Select call. */    fd_set wait_set;	/* A set representing the connections that				 * have been established. 				 */    struct timeval tm;		/* A timelimit of zero for polling for new				 * connections. 				 */    FD_ZERO (&wait_set);    FD_SET (fd, &wait_set);    tm.tv_sec = 0;    tm.tv_usec = 0;    status = select (FD_SETSIZE, &wait_set, (fd_set *) 0, (fd_set *) 0, &tm);/* * if (status < 0) * sprintf (socket_error, "Error in select: %s", sys_errlist[errno]);  */    return (status);}intconvert_msg_id (int player_id, char *msg){    int i;    char msg_buf[255];    if (strlen (msg) < 3)    {	sprintf (msg_buf, "Error msg: %s", msg);	err (msg_buf);	return 0;    }    for (i = 0; i < 3; i++)	if (msg[i] < '0' || msg[i] > '9')	{	    sprintf (msg_buf, "%d", msg[i]);	    err (msg_buf);	}    return (msg[0] - '0') * 100 + (msg[1] - '0') * 10 + (msg[2] - '0');}voidlist_player (int fd){    int i;    char msg_buf[255];    int total_num = 0;    write_msg (fd, "101-------------    目前上线使用者    ---------------");    strcpy (msg_buf, "101");    for (i = 1; i < MAX_PLAYER; i++)    {	if (player[i].login == 2)	{	    total_num++;	    if ((strlen (msg_buf) + strlen (player[i].name)) > 50)	    {		write_msg (fd, msg_buf);		strcpy (msg_buf, "101");	    }	    strcat (msg_buf, player[i].name);	    strcat (msg_buf, "  ");	}    }    if (strlen (msg_buf) > 4)	write_msg (fd, msg_buf);    write_msg (fd, "101--------------------------------------------------");    sprintf (msg_buf, "101共 %d 人", total_num);    write_msg (fd, msg_buf);}voidlist_table (int fd, int mode){    int i;    char msg_buf[255];    int total_num = 0;    write_msg (fd, "101   桌长       人数  附注");    write_msg (fd, "101--------------------------------------------------");    for (i = 1; i < MAX_PLAYER; i++)    {	if (player[i].login && player[i].serv > 0)	{	    if (player[i].serv > 4)	    {		if (player[i].serv == 5)		    err ("SERV=5\n");		else		{		    err ("LIST TABLE ERROR!");		    sprintf (msg_buf, "serv=%d\n", player[i].serv);		    close_id (i);		    err (msg_buf);		}	    }	    if (mode == 2 && player[i].serv >= 4)		continue;	    total_num++;	    sprintf (msg_buf, "101   %-10s %-4s  %s"		     ,player[i].name, number_map[player[i].serv]		     ,player[i].note);	    write_msg (fd, msg_buf);	}    }    write_msg (fd, "101--------------------------------------------------");    sprintf (msg_buf, "101共 %d 桌", total_num);    write_msg (fd, msg_buf);}voidlist_stat (int fd, char *name){    char msg_buf[255];    char msg_buf1[255];    char order_buf[30];    int i;    int total_num;    int order;    struct player_record tmp_rec;    total_num = 0;    order = 1;    if (!read_user_name (name))    {	write_msg (fd, "101找不到这个人!");	return;    }    sprintf (msg_buf, "101◇名称:%s  %s", record.name, record.last_login_from);    if ((fp = fopen (RECORD_FILE, "rb")) == NULL)    {	sprintf (msg_buf, "(stat) Cannot open file\n");	err (msg_buf);	return;    }    rewind (fp);    if (record.game_count >= 16)	while (!feof (fp) && fread (&tmp_rec, sizeof (tmp_rec), 1, fp))	{	    if (tmp_rec.name[0] != 0 && tmp_rec.game_count >= 16)	    {		total_num++;		if (tmp_rec.money > record.money)		    order++;	    }	}    if (record.game_count < 16)	strcpy (order_buf, "无");    else	sprintf (order_buf, "%d/%d", order, total_num);    sprintf (msg_buf1, "101◇金额:%ld 排名:%s 上线次数:%d 已玩局数:%d",	     record.money, order_buf, record.login_count, record.game_count);    write_msg (fd, msg_buf);    write_msg (fd, msg_buf1);    fclose (fp);}who (fd, name)     int fd;     char *name;{    char msg_buf[255];    int i;    int serv_id;    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].login && player[i].serv)	    if (strcmp (player[i].name, name) == 0)	    {		serv_id = i;		goto found_serv;	    }    write_msg (fd, "101找不到此桌");    return;  found_serv:;    sprintf (msg_buf, "101%s  ", player[serv_id].name);    write_msg (fd, "101----------------   此桌使用者   ------------------");    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].join == serv_id)	{	    if (strlen (msg_buf) + strlen (player[i].name) > 53)	    {		write_msg (fd, msg_buf);		strcpy (msg_buf, "101");	    }	    strcat (msg_buf, player[i].name);	    strcat (msg_buf, "  ");	}    if (strlen (msg_buf) > 4)	write_msg (fd, msg_buf);    write_msg (fd, "101--------------------------------------------------");}lurker (fd)     int fd;{    int i, total_num = 0;    char msg_buf[255];    strcpy (msg_buf, "101");    write_msg (fd, "101-------------   目前□置之使用者   ---------------");    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].login == 2 && (player[i].join == 0 && player[i].serv == 0))	{	    total_num++;	    if ((strlen (msg_buf) + strlen (player[i].name)) > 53)	    {		write_msg (fd, msg_buf);		strcpy (msg_buf, "101");	    }	    strcat (msg_buf, player[i].name);	    strcat (msg_buf, "  ");	}    if (strlen (msg_buf) > 4)	write_msg (fd, msg_buf);    write_msg (fd, "101--------------------------------------------------");    sprintf (msg_buf, "101共 %d 人", total_num);    write_msg (fd, msg_buf);}find_user (fd, name)     int fd;     char *name;{    int i;    char msg_buf[255];    int id;    char *ctime ();    char last_login_time[80];    id = find_user_name (name);    if (id > 0)    {	if (player[id].login == 2)	{	    if (player[id].join == 0 && player[id].serv == 0)	    {		sprintf (msg_buf, "101◇%s □置中", name);		write_msg (fd, msg_buf);	    }	    if (player[id].join)	    {		sprintf (msg_buf, "101◇%s 在 %s 桌内", name, player[player[id].join].name);		write_msg (fd, msg_buf);	    }	    if (player[id].serv)	    {		sprintf (msg_buf, "101◇%s 在 %s 桌内", name, player[id].name);		write_msg (fd, msg_buf);	    }	    return;	}    }    if (!read_user_name (name))    {	sprintf (msg_buf, "101◇没有 %s 这个人", name);	write_msg (fd, msg_buf);    }    else    {	sprintf (msg_buf, "101◇%s 不在线上", name);	write_msg (fd, msg_buf);	strcpy (last_login_time, ctime (&record.last_login_time));	last_login_time[strlen (last_login_time) - 1] = 0;	sprintf (msg_buf, "101◇上次连线时间: %s", last_login_time);	write_msg (fd, msg_buf);    }}broadcast (player_id, msg)     int player_id;     char *msg;{    int i;    char msg_buf[255];    if (strcmp (player[player_id].name, "candle") != 0)	return;    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].login == 2)	{	    sprintf (msg_buf, "101%s", msg);	    write_msg (player[i].sockfd, msg_buf);	}}send_msg (player_id, msg)     int player_id;     char *msg;{    char *str1, *str2;    int i;    char msg_buf[255];    str1 = strtok (msg, " ");    str2 = msg + strlen (str1) + 1;    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].login == 2 && strcmp (player[i].name, str1) == 0)	{	    sprintf (msg_buf, "101*%s* %s", player[player_id].name, str2);	    write_msg (player[i].sockfd, msg_buf);	    return;	}    write_msg (player[player_id].sockfd, "101找不到这个人");}invite (player_id, name)     int player_id;     char *name;{    int i;    char msg_buf[255];    for (i = 1; i < MAX_PLAYER; i++)	if (player[i].login == 2 && strcmp (player[i].name, name) == 0)	{	    sprintf (msg_buf, "101%s 邀请你加入 %s", player[player_id].name,		     (player[player_id].join == 0) ?	      player[player_id].name : player[player[player_id].join].name);	    write_msg (player[i].sockfd, msg_buf);	    return;	}    write_msg (player[player_id].sockfd, "101找不到这个人");}init_socket (){    struct sockaddr_in serv_addr;    int on = 1;    /*     * open a TCP socket for internet stream socket      */    if ((gps_sockfd = socket (AF_INET, SOCK_STREAM, 0)) < 0)	err ("Server: cannot open stream socket");    /*     * bind our local address      */    bzero ((char *) &serv_addr, sizeof (serv_addr));    serv_addr.sin_family = AF_INET;    serv_addr.sin_addr.s_addr = htonl (INADDR_ANY);    serv_addr.sin_port = htons (gps_port);    setsockopt (gps_sockfd, SOL_SOCKET, SO_REUSEADDR, (char *) &on, sizeof (on));    if (bind (gps_sockfd, (struct sockaddr *) &serv_addr, sizeof (serv_addr)) < 0)    {	printf ("server: cannot bind local address\n");	exit (1);    }    listen (gps_sockfd, 10);    printf ("Listen for client...\n");}char *lookup (struct sockaddr_in *cli_addrp){    struct hostent *hp;    char *hostname;    hp = gethostbyaddr ((char *) &cli_addrp->sin_addr,			sizeof (struct in_addr), cli_addrp->sin_family);    if (hp)	hostname = (char *) hp->h_name;    else	hostname = inet_ntoa (cli_addrp->sin_addr);    return hostname;}init_variable (){    int i;    login_limit = 100;    for (i = 0; i < MAX_PLAYER; i++)    {	player[i].login = 0;	player[i].serv = 0;	player[i].join = 0;	player[i].type = 16;	player[i].note[0] = 0;	player[i].username[0] = 0;    }}intread_user_name (name)     char *name;{    struct player_record tmp_rec;    char msg_buf[255];    if ((fp = fopen (RECORD_FILE, "a+b")) == NULL)    {	sprintf (msg_buf, "(read_user_name) Cannot open file!\n");	err (msg_buf);	return;    }    rewind (fp);    while (!feof (fp) && fread (&tmp_rec, sizeof (tmp_rec), 1, fp))    {	if (strcmp (name, tmp_rec.name) == 0)	{	    record = tmp_rec;	    fclose (fp);	    return 1;	}    }    fclose (fp);    return 0;}intread_user_id (id)     unsigned int id;{    char msg_buf[255];    if ((fp = fopen (RECORD_FILE, "a+b")) == NULL)    {	sprintf (msg_buf, "(read_user_id) Cannot open file!\n");	err (msg_buf);	return;    }    rewind (fp);    fseek (fp, sizeof (record) * id, 0);    fread (&record, sizeof (record), 1, fp);    fclose (fp);}intadd_user (int player_id, char *name, char *passwd){    long time ();    struct stat status;    stat (RECORD_FILE, &status);    if (!read_user_name (""))	record.id = status.st_size / sizeof (record);    strcpy (record.name, name);    strcpy (record.password, genpasswd (passwd));    record.money = DEFAULT_MONEY;    record.level = 0;    record.login_count = 1;    record.game_count = 0;    time (&record.regist_time);    record.last_login_time = record.regist_time;    record.last_login_from[0] = 0;    if (player[player_id].username[0] != 0)    {	sprintf (record.last_login_from, "%s@", player[player_id].username);    }    strcat (record.last_login_from,     		lookup (&(player[player_id].addr)));    if (check_user (player_id))    {	write_record ();	return 1;    }    else	return 0;}intcheck_user (int player_id){    char msg_buf[255];    char from[80];    char email[80];    FILE *baduser_fp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -