一个基于Unix套接字的注册登录系统
2016/5/5
今天,我参考《Unix网络编程-卷1》第5章的TCP回射客户/服务器程序写了一个简单的注册登录系统,其功能如下:(1)注册。客户端向服务器发送个人信息请求注册,服务器查询MySQL数据库以检查该客户是否已存在,若是则禁止注册,并返回“用户已存在,注册失败”的错误信息,否则将新用户信息添加到MySQL数据库,并返回“注册成功”的信息。(2)登录。客户端向服务器发送个人账号和密码等两项信息,服务器查询MySQL数据库以检查账号是否存在、账号和密码是否匹配,若不存在或不匹配则禁止登录,并返回“用户或密码不正确”的错误信息,否则允许登录,并返回“登录成功”的信息。
客户端主程序如下所示。除了最后的处理函数改为Login()外,其余部分和《Unix网络编程》第5章TCP回射客户程序tcpcli01.c基本相同。
/**
* Program:
* A client program requesting server for registration or login.
* History:
* 2016/5/5 along ver1.0
*/ #include "unp.h" int main(int argc, char **argv)
{
int sockfd;
struct sockaddr_in servaddr; if (argc != )
err_quit("Usage: logincli <IPaddress>\n"); sockfd = Socket(AF_INET, SOCK_STREAM, ); bzero(&servaddr, sizeof(servaddr));
servaddr.sin_family = AF_INET;
servaddr.sin_port = htons(SERV_PORT);
Inet_pton(AF_INET, argv[], &servaddr.sin_addr); Connect(sockfd, (SA *) &servaddr, sizeof(servaddr)); Login(sockfd);
return ;
}
客户器请求注册登陆的函数(其中GetUserInfo()函数负责获取usrInfo)
void Login(int sockfd)
{
char usrInfo[MAXSIZE];
char result[MAXSIZE]; if (GetUserInfo(usrInfo) == )
return; Writen(sockfd, usrInfo, MAXLINE);
if (Readline(sockfd, result, MAXSIZE) == )
err_quit("login: server terminated prematurely"); Fputs(result, stdout);
}
服务器主程序(如下所示。除了其中的处理函数改为CheckPlayer(),其余部分和《Unix网络编程》第5章TCP回射服务器tcpserv01.c基本相同。
/**
* Program:
* A echo server program using tcp protocol.
* History:
* 2016/4/24 along ver1.0
*/ #include "unp.h"
#include "sigchldwaitpid.h"
#include "checkplayer.h"
#include "player.h" int main()
{
int listenfd, connfd;
pid_t childpid;
socklen_t clilen;
struct sockaddr_in cliaddr, servaddr; listenfd = Socket(AF_INET, SOCK_STREAM, );
bzero(&servaddr, sizeof(servaddr)); servaddr.sin_family = AF_INET;
servaddr.sin_addr.s_addr = htonl(INADDR_ANY);
servaddr.sin_port = htons(SERV_PORT); Bind(listenfd, (SA *) &servaddr, sizeof(servaddr)); Listen(listenfd, LISTENQ);
Signal(SIGCHLD, sig_chld); for ( ; ; )
{
clilen = sizeof(cliaddr);
connfd = Accept(listenfd, (SA *) &cliaddr, &clilen);
CheckPlayer(connfd);
Close(connfd);
}
}
服务器处理用户请求函数
void CheckPlayer(int sockfd)
{
ssize_t n;
char choice;
char buf[MAXLINE];
char result[MAXLINE];
PlayerInfo plyrInfo;
SignerInfo sgnrInfo; again:
n = read(sockfd, buf, MAXLINE); if (n < && errno == EINTR)
goto again;
else if (n < )
{
snprintf(result, MAXLINE, "Read Error.\n");
Writen(sockfd, result, strlen(result));
return;
} choice = buf[];
if (choice < '' || choice > '')
{
snprintf(result, MAXLINE, "Error: Unknow request.\n");
}
else if (choice == '') /* Request to login */
{
sscanf(buf, "%c %s %s", &choice,
sgnrInfo.name, sgnrInfo.password);
CheckLogin(&sgnrInfo, result);
}
else
{
sscanf(buf, "%c %s %s %s %s", &choice,
plyrInfo.name, plyrInfo.phone,
plyrInfo.email, plyrInfo.password);
CheckRegister(&plyrInfo, result);
} Writen(sockfd, result, strlen(result));
}
2016/5/7
一个基于Unix套接字的注册登录系统的更多相关文章
- Linux/UNIX套接字连接
套接字连接 套接字是一种通信机子.凭借这样的机制.客户/server系统的开发工作既能够在本地单机上进行.也能够夸网络进行. 套接字的创建和使用与管道是有差别的.由于套接字明白地将客户和server区 ...
- Unix套接字接口
简介 套接字是操作系统中用于网络通信的重要结构,它是建立在网络体系结构的传输层,用于主机之间数据的发送和接收,像web中使用的http协议便是建立在socket之上的.这一节主要讨论网络套接字. 套接 ...
- NetLink通信原理研究、Netlink底层源码分析、以及基于Netlink_Connector套接字监控系统进程行为技术研究
1. Netlink简介 0x1:基本概念 Netlink是一个灵活,高效的”内核-用户态“.”内核-内核“.”用户态-用户态“通信机制.通过将复杂的消息拷贝和消息通知机制封装在统一的socket a ...
- 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发
''' 写一个基于TCP协议套接字,服务端实现接收客户端的连接并发 ''' client import socket import time client = socket.socket() clie ...
- MFC基于CAsyncSocket套接字客户端代码示范
MFC基于CAsyncSocket套接字客户端代码示范 https://blog.csdn.net/txwtech/article/details/93016190
- 监听套接字描述字 已连接套接字描述字 和打电话的情形非常不一样的地方 完成了 TCP 三次握手,操作系统内核就为这个客户生成一个已连接套接字
1. accept: 电话铃响起了-- 当客户端的连接请求到达时,服务器端应答成功,连接建立,这个时候操作系统内核需要把这个事件通知到应用程序,并让应用程序感知到这个连接.这个过程,就好比电信运营商完 ...
- DIY一个基于树莓派和Python的无人机视觉跟踪系统
DIY一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站差点儿已经是标配.假设想来点高级的--在无人机上直接处理拍摄的图像并实现自己主动控制要怎么实现 ...
- php注册登录系统(一)-极简
序 登录注册系统是日常上网最普通的操作,我设了一个分类一步步完善注册登录系统,若有哪里错误请慧教 所用语言:php 数据库 :mysql 本次实现功能: 1.用户注册 2.用户登录 主要文件: 完整代 ...
- fsockopen — 打开一个网络连接或者一个Unix套接字连接
fsockopen (PHP 4, PHP 5, PHP 7) 说明 resource fsockopen ( string $hostname [, int $port = -1 [, int &a ...
随机推荐
- [Luogu] 高斯消元法
https://www.luogu.org/problemnew/show/P3389 模拟,消元 #include <bits/stdc++.h> #define DB double ; ...
- C语言学习笔记1-数据类型和标识符
http://blog.csdn.net/jadeshu/article/details/50751901 1.数据类型 ---1.1基本类型 --------------数值型(short(2) i ...
- uiautomatorviewer真机使用报错Error obtaining UI hierarchy
Mac OS+Android真机 8.0在使用uiautomatorviewer获取界面时报Error obtaining UI hierarchy Reason: Error while obtai ...
- MySQL数据分析-(9)库操作补充:用户管理和权限管理
大家好,我是jacky,很高兴继续跟大家学习MySQL数据分析实战,本节课的主题是用户管理和权限管理: 在分享之前,jacky在不厌其烦的强调一下:学习任何一门学科和技能,最重要的是捋清逻辑,我们要知 ...
- c语言 宏
#代表命令要被预处理器处理#define 定义的宏可以出现在程序的任意位置#define 定义之后的代码都可以使用这个宏 宏是字面量,不占用内存 单步编译预处理器,只进行文本替换,不进行语法检查:gc ...
- Fiddler 安装使用
Fiddler是一个蛮好用的抓包工具,可以将网络传输发送与接受的数据包进行截获.重发.编辑.转存等操作.也可以用来检测网络安全.反正好处多多,举之不尽呀!当年学习的时候也蛮费劲,一些蛮实用隐藏的小功能 ...
- navicat连接远程数据库报错'client does not support authentication protocol requested by server consider ...'解决方案
[1.cmd终端连接远程mysql数据库方法] mysql -uhello -pworld -h192.168.1.88 -P3306 -Dmysql_oa mysql -u用户名 -p密码 -h ...
- centos7 - nginx配置安装phpmyadmin
原文 https://www.linuxidc.com/Linux/2017-10/147556.htm 使用Nginx搭建phpMyAdmin Nginx有什么用? Nginx可读作Engin ...
- JMeter-jp@gc - PerfMon Metrics Collector-CPU监控工具的配置及使用(win版本)
服务器端放这个 如果端口号被占用,默认报这个错: 如果默认的4444端口被占用的修改: C:\Users\Administrator>CD E:\E:\apache-jmeter-4.0\Ser ...
- 开发软件-IntelliJ IDEA:百科
ylbtech-开发软件-IntelliJ IDEA:百科 IDEA 全称 IntelliJ IDEA,是java语言开发的集成环境,IntelliJ在业界被公认为最好的java开发工具之一,尤其在智 ...