1、服务器
#include <stdio.h>
#include <sys/types.h> /* See NOTES */
#include <sys/socket.h>
#include <sqlite3.h>
#include <string.h>
#include <unistd.h>
#include <arpa/inet.h>
#include <pthread.h>
#define PORT 9999 //端口号
#define REG 6000 //表示注册请求
#define RES_OK 6001 //成功注册
#define RES_ERR 6002 //注册失败
#define LOGIN 6003 //表示登录请求
#define LOG_OK 6004 //登录成功
#define LOG_ERR 6005 //登录失败
#define SIZE 20 //账号密码的最大长度
typedef enum {FALSE,TRUE}BOOL;
// 创建,绑定端口和ip,监听套接字
int init();
// 通信套接字
int myAccept(int listen_socket);
//工作函数
void *handl_client(void *v);
//注册
void reg(int cmd,long client_socket);
//登录
BOOL login(int cmd,long client_socket);
int main()
{
int listen_socket = init();
if(-1 == listen_socket)
return -1;
while(1)
{
long client_socket = myAccept(listen_socket);
if(-1 == client_socket)
{
continue;
printf("dasdasdas\n");
}
//创建线程
pthread_t thread;
pthread_create(&thread,NULL,handl_client,(void *)client_socket);
pthread_detach(thread);
}
close(listen_socket);
return 0;
}
// 创建,绑定端口和ip,监听套接字
int init()
{
int listen_socket = socket(AF_INET, SOCK_STREAM, 0); //创建
if(-1 == listen_socket)
{
perror("创建套接字失败");
return -1;
}
struct sockaddr_in addr;
memset(&addr, 0, sizeof(struct sockaddr_in));
addr.sin_family = AF_INET; /* Internet地址族 */
addr.sin_port = htons(PORT); /* 端口号 */
addr.sin_addr.s_addr = htonl(INADDR_ANY); /* IP地址, 绑定本地的所有ip地址*/
int ret = bind(listen_socket, (const struct sockaddr *)&addr, sizeof(addr)); //绑定
if(-1 == ret)
{
perror("绑定失败");
return -1;
}
ret = listen(listen_socket, 5); // 监听套接字