02正式学习第一天

1、windows上加载socket库

在这里插入图片描述
链接输入ws2_32.lib

代码code:

#ifdef _WIN32
#include<windows.h>
#else
#include <sys/socket.h>
#include<sys/types.h>
#include<unistd.h>
#include<cstring>
#include<arpa/inet.h>
#include<netinet/in.h>
#define closesocket close
#endif
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<thread>
using namespace std;
class TcpThread
{
public:void Main(){char buf[1024] = { 0 };for (;;){int recvlen = recv(client, buf, sizeof(buf) - 1, 0);if (recvlen <= 0)break;buf[recvlen] = '\0';if (strstr(buf, "quit") != NULL){char re[] = "quit success\n";send(client, re, sizeof(re) + 1, 0);break;}int sendlen = send(client, "ok!!\n",sizeof("ok!!\n"), 0);printf("recv %s\n", buf);}closesocket(client);delete this;}int client = 0;
};
int main(int argc, char* argv[])
{
#ifdef _WIN32WSADATA ws;WSAStartup(MAKEWORD(2, 2), &ws);
#endif//调用句柄int sock = socket(AF_INET, SOCK_STREAM, 0);if (sock == -1){printf("create socket failed\n");return -1;}unsigned short port = 8181;if (argc > 1){port = atoi(argv[1]);}sockaddr_in saddr;saddr.sin_family = AF_INET;saddr.sin_port = htons(port);//转换字节序成网络字节序saddr.sin_addr.s_addr = htons(0);if (bind(sock, (sockaddr*)&saddr, sizeof(saddr)) != 0){printf("bind port %d failed\n", port);return -2;}printf("bind port %d success\n", port);//printf("[%d]", sock);listen(sock, 10);//第二个参数位套接字请求长度//端口号和地址for (;;){sockaddr_in caddr; //返回结构体大小和地址
#ifdef WIN32int len = sizeof(struct sockaddr);
#elsesocklen_t len = sizeof(caddr);
#endifint client = accept(sock, (sockaddr*)&caddr, &len); //这个sock建立链接if (client <= 0)break;printf("Aacept client %d\n", client);char* ip = inet_ntoa(caddr.sin_addr);unsigned short cport = ntohs(caddr.sin_port);printf("client ip is %s,port is %d\n", ip, port);TcpThread* th = new TcpThread;th->client = client;thread sth(&TcpThread::Main, th);//th入口函数sth.detach(); //线程分离}#ifdef _WIN32closesocket(sock);#elseclose(sock); #endif	//可以 define close closesocketgetchar();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Https【Linux网络编程】

目录 一、为什么需要https 二、常见加密方法 1、对称加密 2、非对称加密 3、数据指纹 三、选择什么加密方案&#xff1f; 方案一&#xff1a;对称加密&#xff08;&#xff09; 方案二&#xff1a;双方使用非对称加密&#xff08;效率低&#xff09; 方案三&#xff1a…

git基本操作二(小白快速上手)

1、前言 接上篇我们接着来继续讲 2、.gitignore忽略文件 创建一个.gitignore文件&#xff0c;并将其置于项目的根目录下&#xff0c;Git将自动识别并根据该规则忽略相应的文件和目录。 # 忽略所有的 .log 文件 *.log# 但跟踪所有的 build.log 文件 !build.log# 忽略所有的 /lo…

uprobe的介绍+运行情况,代码解释(用户层+内核层代码),修改内核层写法,将两个函数与bpf程序分离,去掉用户函数所在程序的符号表(strip,如何解决)

目录 uprobe 介绍 运行情况 代码解释 .bpf.c 源码 语法 SEC("uprobe") SEC("uprobe//proc/self/exe:uprobed_sub") .c 源码 语法 asm volatile (""); LIBBPF_OPTS(bpf_uprobe_opts, uprobe_opts); uprobe_opts.func_name up…

修改docker容器日志大小

docker-compose.yaml logging:options:max-size: "10m"docker run docker run -d \--name example-container \--log-opt max-size10m \--log-opt max-file3 \nginx:latestdocker daemon全局配置 /etc/docker/daemon.json 参考文档&#xff1a;https://docs.docker…

基于springboot实现月度员工绩效考核管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现月度员工绩效考核管理系统演示 摘要 科学时代的发展改变了人类的生活&#xff0c;促使网络与计算机技术深入人类的各个角落&#xff0c;得以普及到人类的具体生活中&#xff0c;为人类的时代文明掀开新的篇章。本系统为月度员工绩效考核管理系统&#xff0c…

给虚拟机配置静态IP并使用FileZIlla在虚拟机和Windows之间传输文件(ssh和ftp两种方法)

一、配置操作系统网络 &#x1f338;下面的步骤主要是配置虚拟机的静态IP&#xff0c;方便后续用 FikeZilla 在windows和虚拟机之间传输文件&#xff08;否则用默认的ip分配方案为 DHCP ,每一次开机时的ip都是有可能不同的,这样就会导致每次远程连接都需要查看ip地址.&#xf…

ABAP AMDP 示例

AMDP 是HANA开发中的一种优化模式 按SAP的官方建议&#xff0c;在可以使用Open SQL实现需要的功能或优化目标的时候&#xff0c;不建议使用AMDP。而在需要使用Open SQL不支持的特性&#xff0c;或者是大量处理流和分析导致了数据库和应用服务器之间有重复的大量数据传输的情况…

Java JSON字符串相关问题

一、依赖包 <!--json包--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.15</version></dependency> 二、举例 1.实体对象转Json字符串 1.1 代码实现 Dog.java: pack…

HarmonyOS实战开发-Stage模型下Ability的创建和使用

介绍 本篇Codelab基于Stage模型&#xff0c;对Ability的创建和使用进行讲解。首先在课程中我们将带领大家使用DevEco Studio创建一个Stage模型Ability&#xff0c;并使用UIAbilityContext启动另一个Ability&#xff0c;然后借助Want&#xff0c;在Ability之间传递参数&#xf…

Autosar-EcuM配置详解(免费)-1

1.1创建EcuM模块 按以下步骤完成EcuM的创建。 创建完成后&#xff0c;在Bsw_Modules下面会生成EcuM模块&#xff0c;如下所示&#xff1a; 在工程根目录下会创建一个“EcucModuleConfiguration.arxml”文件&#xff0c;文件名字在上面第6个步骤上输入。后面所有EcuM的配置都将…

[OpenCV学习笔记]Qt+OpenCV实现图像灰度反转、对数变换和伽马变换

目录 1、介绍1.1 灰度反转1.2 图像对数变换1.3 图像伽马变换 2、效果图3、代码实现4、源码展示 1、介绍 1.1 灰度反转 灰度反转是一种线性变换&#xff0c;是将某个范围的灰度值映射到另一个范围内&#xff0c;一般是通过灰度的对调&#xff0c;突出想要查看的灰度区间。 S …

二、Java语法基础

1、Java语言的关键字、标识符及命名规范 1)java关键字 2)标识符 3)JAVA中的命名规范 包名的命名规范:域名.公司名称.项目名称.模块名称 类的命名规范:首字母大写,第二个单词的首字母大写,以此类推。 2、进制间的转换(二进制、十进制) 1)十进制->二进制 采用…