国庆作业6

news2025/1/13 9:41:04

TCP服务器

#include "head.h"
#define PORT 2580                //端口号
#define IP "192.168.31.219"     //本机IP
int main(int argc, const char *argv[])
{
	sqlite3* db=NULL;
	if(sqlite3_open("./my.db",&db)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_open %d : %s __%d__\n",\
				sqlite3_errcode(db),sqlite3_errmsg(db),__LINE__);
		return -1;
	}
	printf("database open success __%d__\n",__LINE__);
 
	//创建一张表格
	char sql[128]="create table if not exists stu (name char,password int);";
	char* errmsg=NULL;
	if(sqlite3_exec(db,sql,NULL,NULL,&errmsg)!=SQLITE_OK)
	{
		fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg,__LINE__);
		return -1;
	}
	printf("create table stu success\n");
 
	//创建流式套接字
	int sfd = socket(AF_INET,SOCK_STREAM,0);
	if(sfd<0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("socket create success\n");
	//允许端口快速复用
	int reuse = 1;
    if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }                                                                           
    printf("允许端口快速复用成功\n");
 
 
	//填充地址信息结构体给bind函数绑定使用
	//真实地址信息结构体根据地质族指定,AF_INET;man 7 ip
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;               //必须填AF_INET;
	sin.sin_port = htons(PORT);            //端口号网络字节序,1024-49151
	sin.sin_addr.s_addr = inet_addr(IP);   //本机IP的网络字节序,ifconfig
 
	//绑定服务器的地址信息》必须绑定
	if(bind(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
	{
		ERR_MSG("bind");
		return -1;
	}
	printf("bind success\n");
 
	//将套接字转换成被动监听状态
	if(listen(sfd,128)<0)
	{
		ERR_MSG("listen");
		return -1;
	}
	printf("listen success\n");
 
	struct sockaddr_in cin;
	socklen_t addrlen = sizeof(cin);
	//获取连接成功的客户端信息,生成新的文件描述符
	//该文件描述符才是与客户端通信的文件描述符
	
	//int newfd = accept(sfd,NULL,NULL);
	int newfd = accept(sfd,(struct sockaddr*)&cin,&addrlen);
	if(newfd<0)
	{
		ERR_MSG("accept");
		return -1;
	}
	printf("[%s:%d] newfd =%d 客户端连接成功__%d__\n",inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
 
	char buf[128]="";
	ssize_t res=0;
	int flag=0;
	while(1)
	{
		bzero(buf,sizeof(buf));
		//接收数据
		res=recv(newfd,buf,sizeof(buf),0);
		if(res<0)
		{
			ERR_MSG("recv");
			return -1;
		}
		else if(0==res)
		{
			printf("[%s:%d] newfd=%d : 客户端下线 __%d__\n",\
					inet_ntoa(cin.sin_addr),ntohs(cin.sin_port),newfd,__LINE__);
			break;
		}
 
		int i;
		char str[128]="";
		for(i=0;buf[i]!=' ';i++)
		{
			str[i]=buf[i];
		}
		str[i]=buf[i];
 
		char sql[128]="select name from stu;";
		char **pre=NULL;
		int row,column;
		char* errmsg=NULL;
		if(sqlite3_get_table(db,sql,&pre,&row,&column,&errmsg)!=SQLITE_OK)
		{
			fprintf(stderr,"sqlite3_get_table: %s \n",errmsg);
			return -1;
		}
		for(int i=0;i<row+1;i++)
		{
			for(int j=0;j<column;j++)
			{
				if(strcmp(str,pre[(i*column)+j])==0)
				{
					printf("重复注册\n");
					flag=1;
				}
			}
		}
		if(flag==0){
			sqlite3_free_table(pre);
 
			char sql1[128]="";
			char* p1=buf+strlen(str);
			sprintf(sql1,"insert into stu values(\"%s\",\"%s\");",str,p1);
			char* errmsg1 = NULL;
			if(sqlite3_exec(db,sql1,NULL,NULL,&errmsg1)!=SQLITE_OK)
			{
				fprintf(stderr,"sqlite3_exec: %s __%d__\n",errmsg1,__LINE__);
				return -1;
			}
			printf("insert success\n");
 
 
			if(strcmp(buf,"quit")==0)
				break;
			//发送数据
			strcat(buf," add success");
			if(send(newfd,buf,sizeof(buf),0)<0)
			{
				ERR_MSG("send");
				return -1;
			}
			printf("send success\n");
		}
		else if(flag==1)
			break;
	}
	//关闭套接字
	close(sfd);
	close(newfd);
	return 0;
}

 TCP客户端

#include "head.h"
#define SER_PORT 2580                //端口号
#define SER_IP "192.168.31.219"     //本机IP
int main(int argc, const char *argv[])
{
	//创建流式套接字
	int sfd = socket(AF_INET,SOCK_STREAM,0);
	if(sfd<0)
	{
		ERR_MSG("socket");
		return -1;
	}
	printf("socket create success\n");
	//允许端口快速复用
	int reuse = 1;
    if(setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR, &reuse, sizeof(reuse)) < 0)
    {
        ERR_MSG("setsockopt");
        return -1;
    }                                                                           
    printf("允许端口快速复用成功\n");
 
 
	//填充地址信息结构体给bind函数绑定使用
	//真实地址信息结构体根据地质族指定,AF_INET;man 7 ip
	struct sockaddr_in sin;
	sin.sin_family = AF_INET;               //必须填AF_INET;
	sin.sin_port = htons(SER_PORT);            //端口号网络字节序,1024-49151
	sin.sin_addr.s_addr = inet_addr(SER_IP);   //本机IP的网络字节序,ifconfig
 
 
	if(connect(sfd,(struct sockaddr*)&sin,sizeof(sin))<0)
	{
		ERR_MSG("connect");
		return -1;
	}
	printf("connect success\n");
 
	char buf[128]="";
	ssize_t res=0;
	while(1)
	{
		bzero(buf,sizeof(buf));		
		//发送数据
		printf("请输入账户 密码>> ");
		fgets(buf,sizeof(buf),stdin);
		buf[strlen(buf)-1]='\0';
		if(send(sfd,buf,sizeof(buf),0)<0)
		{
			ERR_MSG("send");
			return -1;
		}
		printf("send success\n");
 
		if(strcmp(buf,"quit")==0)
			break;
 
		bzero(buf,sizeof(buf));
		//接收数据
		res=recv(sfd,buf,sizeof(buf),0);
		if(res<0)
		{
			ERR_MSG("recv");
			return -1;
		}
		else if(0==res)
		{
			printf("[%s:%d] newfd=%d : 服务器下线 __%d__\n",\
					SER_IP,SER_PORT,sfd,__LINE__);
			break;
		}
			printf("[%s:%d] newfd=%d : %s  __%d__\n",\
					SER_IP,SER_PORT,sfd,buf,__LINE__);
	}
	//关闭套接字
	close(sfd);
	return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1058086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

FFmpeg 命令:从入门到精通 | ffmpeg filter(过滤器 / 滤镜)

FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09; FFmpeg 命令&#xff1a;从入门到精通 | ffmpeg filter&#xff08;过滤器 / 滤镜&#xff09;ffmpeg fliter 基本内置变量视频裁剪文字水印图片水印画中画视频多宫格处理 FFmpeg 命…

BIOS 如何确定引导扇区的位置

机械硬盘的信息都是存储在磁盘的表面&#xff0c;他们是由一圈一圈的磁道组成的。以前的磁盘的不同磁道的扇区数量是相同的&#xff0c;这就导致了很大的浪费&#xff0c;因为最外面的磁道的密度是最低的&#xff0c;信息是最安全的&#xff0c;所以最外面的磁道是0磁道。后来由…

NPDP产品经理知识(产品创新管理)

复习文化&#xff0c;团队与领导力 产品创新管理&#xff1a; 如何树立愿景&#xff1a; 如何实现产品战略 计划 实施产品开发&#xff1a; 商业化&#xff0c;营销计划&#xff0c;推广活动 管理产品生命周期&#xff1a; 新式走向市场的流程&#xff1a;

win10 关闭病毒防护

windows10彻底关闭Windows Defender的4种方法 - 知乎

科技+智慧+颜值,智慧公厕黑科技提升城市形象

现代社会的科技和智慧正以惊人的速度渗透到我们生活的各个方面&#xff0c;包括公共设施。而作为城市形象的重要组成部分之一&#xff0c;公厕也在不断创新中迎来了智慧的时代。 在传统的公厕中&#xff0c;一些问题一直困扰着我们&#xff0c;比如厕位的占用情况、空气质量的…

腾讯云域名API解析升级版本(通过Java实现)腾讯云动态公网IP绑定域名实现内网服务器公网穿透

公众号推广: 目前CSDN进行VIP可见,文章可在微信公众号进行免费的阅读。 文章内容经过认证实践,比较的清晰易懂,适合初次接触的人员。 请关注微信公众号:菜鸟编程踩坑之路,进入公众号搜索关键词 内网穿透 需求场景: 首先我自己组装了一台自己的服务器,相比较购买的阿…

微信小程序——CSS3渐变

SS3 渐变&#xff08;gradients&#xff09;可以在两个或多个指定的颜色之间显示平稳的过渡。CSS3 定义了两种类型的渐变&#xff08;gradients&#xff09;&#xff1a; 说明 1、线性渐变&#xff08;Linear Gradients&#xff09;- 向下/向上/向左/向右/对角方向&#xff1…

基于体素场景的摄像机穿模处理

基于上一篇一种基于体素的射线检测 使用射线处理第三人称摄像头穿模问题 基于体素的第三人称摄像机拉近简单处理 摄像机移动至碰撞点处 简单的从角色身上发射一条射线到摄像机&#xff0c;中途遇到碰撞就把摄像机移动至该碰撞点 public void UpdateDistance(float defaultDist…

机器学习(监督学习)笔记

笔记内容 代码部分 # 实验2-1 # 批梯度下降 import pandas as pd import numpy as np import random as rd import matplotlib.pyplot as plt # load dataset df pd.read_csv(temperature_dataset.csv) data np.array(df) y0 np.array([i[0] for i in data]) # 第一列作为…

Docker项目部署

目录 一、前端项目部署 1、上传文件 2、开启容器 3、测试 二、后端项目部署 1、打包java项目 2、将jar包和Dockerfile文件长传到Linux系统 3、构建镜像 4、开启容器 5、测试 一、前端项目部署 1、上传文件 里面包括页面和配置文件 worker_processes 1;events {worker…

云畅科技TMS解决方案助力华菱线缆实现智能货运管理

9月26日下午&#xff0c;湖南华菱线缆股份有限公司TMS物流系统上线启动会成功举办&#xff0c;由云畅科技倾力打造的华菱线缆TMS物流系统正式上线运行&#xff0c;标志着湖南华菱线缆股份有限公司在智能化物流货运管理领域的一次重大突破。 湖南华菱线缆股份有限公司董事兼总经…

C#捕捉全局异常

1.运行图片 2.源码 using System; using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using System.Windows.Forms;namespace 捕捉全局异常 {internal static class Program{/// <summary>/// 应用程序的主入口点。/// </summary…

竞赛选题 机器视觉opencv答题卡识别系统

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 答题卡识别系统 - opencv python 图像识别 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0c;学长非常推荐&#xff01; &#x1f947;学长这里给一个题目综合评分(每项满分5分…

【Spring】更简单的读取和存储对象

更简单的读取和存储对象 一. 存储 Bean 对象1. 前置工作&#xff1a;配置扫描路径2. 添加注解存储 Bean 对象Controller&#xff08;控制器存储&#xff09;Service&#xff08;服务存储&#xff09;Repository&#xff08;仓库存储&#xff09;Component&#xff08;组件存储&…

基于transformer的心脑血管心脏病疾病预测

视频讲解:基于transformer的心脑血管疾病预测 完整数据代码分享_哔哩哔哩_bilibili 数据展示: 完整代码: # pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple/ # pip install optuna -i https://pypi.tuna.tsinghua.edu.cn/simple/ import numpy as np …

C++ - 位图 - bitset 容器介绍

前言 之前的两篇博客已经完成 闭散列的开放地址法的哈希表 和 哈希桶基本实现&#xff0c;和对 unordered_set 和 unordered_map 的封装 &#xff1a;C - 封装 unordered_set 和 unordered_map - 哈希桶的迭代器实现_chihiro1122的博客-CSDN博客C - 开散列的拉链法&#xff08…

【JVM】运行时数据区(内存区域划分)详解

文章目录 前言一、JVM 运行时数据区1, 堆2, Java 虚拟机栈3, 本地方法栈4, 程序计数器5, 元数据区 / 方法区 二、内存异常问题1, 栈溢出2, 内存溢出3, 内存泄露 总结 前言 &#x1f4d5;各位读者好, 我是小陈, 这是我的个人主页 &#x1f4d7;小陈还在持续努力学习编程, 努力通…

【重拾C语言】三、分支程序设计(双分支和单分支程序设计、逻辑判断、多分支程序设计、枚举类型表示;典型例题:判断闰年和求一元二次方程根)

目录 前言 三、分支程序设计 3.1 判断成绩是否及格——双分支程序设计 3.2 成绩加上获奖信息—单分支程序设计 3.3 逻辑判断——布尔类型 3.4 获奖分等级——多分支程序设计 3.5 表示汽车种类——枚举类型 3.6 例题 3.6.1 例题——判断某个年份是否闰年 3.6.2 例题—…

SG Former论文学习笔记

超越SWin和CSWin Transformer的新模型 代码地址&#xff1a;https://github.com/OliverRensu/SG-Former 论文地址&#xff1a;https://arxiv.org/pdf/2308.12216.pdf ViT在各种视觉任务中虽然成功&#xff0c;但它的计算成本随着Token序列长度的增加呈二次增长&#xff0c;这在…

前端系列-1 HTML+JS+CSS基础

背景&#xff1a; 前端系列会收集碎片化的前端知识点&#xff0c;作为自己工作和学习时的字典&#xff0c;欢迎读者收藏和使用。 笔者是后端开发&#x1f636;前端涉猎不深&#xff0c;因此文章重在广度和实用&#xff0c;对原理和性能不会过多深究。 1.html 1.1 html5网页结…