2.11作业

#include<myhead.h>
#define IP "192.168.174.133"
#define PORT 7788
typedef struct msg_t
{
	
}msg_t;
void *handle_client(void *newfd)
{
	ssize_t res=-1;
	msg_t msg;
	res=recv(*(int *)newfd,&msg,sizeof(msg),0);
	if(res<0)
	{
		ERR_MSG("recv");
	}
	else//处理信息
	{
		
	}
}

int main(int argc, const char *argv[])
{
	int sfd;
	if((sfd=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		ERR_MSG("socket");
		return 0;
	}
	int reuse=1;
	if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(PORT);
	sin.sin_addr.s_addr=inet_addr(IP);
	socklen_t socklen=sizeof(sin);
	if(bind(sfd,(struct sockaddr *)(&sin),socklen)!=0)
	{
		ERR_MSG("bind");
		return 0;
	}
	if(listen(sfd,128)!=0)
	{
		ERR_MSG("listen");
		return -1;
	}
	struct sockaddr_in cin;
	socklen=sizeof(cin);
	int newfd=-1;
	int tid;
	while(1)
	{
		if((newfd=accept(sfd,(struct sockaddr *)(&cin),&socklen))<0)
		{
			ERR_MSG("accept");
		}
		pthread_t tid;
		if((pthread_create(&tid,NULL,handle_client,&newfd))!=0)
		{
			ERR_MSG("pthread_create");
		}
		pthread_detach(tid);
	}
	
	return 0;
}
#include<myhead.h>
#include"fun.h"
#define IP "192.168.174.132"
#define PORT 8888


int main(int argc, const char *argv[])
{
	//----------打开数据库-----------
	sqlite3 *pic;
	if(sqlite3_open("./pic.db",&pic)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open %s %d __%d__\n",sqlite3_errmsg(pic),sqlite3_errcode(pic),__LINE__);
	}
	//---------添加表----------------
	char *errmsg;
	char opt[128]="create table if not exists pic(ID int PRIMAERY KEY,image BLOB);";
	if(sqlite3_exec(pic,opt,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec %s %d __%d__",sqlite3_errmsg(pic),sqlite3_errcode(pic),__LINE__);
	}
	//----------创建套接字------------
	int sfd;
	if((sfd=socket(AF_INET,SOCK_STREAM,0))<0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("套接字创建成功\n");
	//----------端口复用--------------
	int reuse=1;
	if(setsockopt(sfd,SOL_SOCKET,SO_REUSEADDR,&reuse,sizeof(reuse))<0)
	{
		ERR_MSG("setsockopt");
		return -1;
	}
	printf("允许端口复用成功\n");
	//----------bind--------------
	struct sockaddr_in sin;
	sin.sin_family=AF_INET;
	sin.sin_port=htons(PORT);
	sin.sin_addr.s_addr=inet_addr(IP);	
	socklen_t socklen=sizeof(sin);
	if(bind(sfd,(struct sockaddr *)(&sin),socklen)!=0)
	{
		ERR_MSG("bind");
		return -1;
	}
	printf("绑定成功\n");
	//--------listen------------
	if(listen(sfd,128)!=0)
	{
		ERR_MSG("listen\n");
		return -1;
	}
	printf("listen 成功\n");
//------------------------------------------------------------------------------
	int newfd=-1;
	struct sockaddr_in cin;
	socklen=sizeof(cin);
	pid_t cpid=-1;
	while(1)
	{
		newfd=accept(sfd,(struct sockaddr *)(&cin),&socklen);
		if(newfd<0)
		{
			ERR_MSG("accept");
			return -1;
		}
		printf("客户端连接%s:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
		cpid=fork();
//------------------------------------------------------------------------------		
		if(cpid==0)
		{
			close(sfd);
			//客户端交互
			msg_t msg;
			ssize_t res;
			while(1)
			{
				bzero(&msg,sizeof(msg));
				res=recv(newfd,&msg,sizeof(msg),0);
				if(res<0)
				{
					ERR_MSG("recv");
				}
				else if(res==0)
				{
					printf("客户端下线%s:%d\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port));
				}
				else//判断消息内容并处理
				{
					
				}
			}
			exit(0);
		}
		close(newfd);		
	}
	if(close(sfd)!=0)
	{
		ERR_MSG("close");
		return -1;
	}
	return 0;
}

  • 6
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值