网络编程

Socket网络编程--简单Web服务器(2)

*爱你&永不变心* 提交于 2019-12-24 22:25:09
  上一小节通过阅读开源的Web服务器--tinyhttpd。大概知道了一次交互的请求信息和应答信息的具体过程。接下来我就自己简单的实现一个Web服务器。   下面这个程序只是实现一个简单的框架出来。这次先实现能够Accept客户端的请求。   简单创建web服务器   webserver.h 1 #include <iostream> 2 #include <string> 3 #include <string.h> 4 #include <stdio.h> 5 #include <stdlib.h> 6 #include <errno.h> 7 #include <sys/types.h> 8 #include <sys/socket.h> 9 #include <netinet/in.h> 10 #include <arpa/inet.h> 11 #include <unistd.h> 12 #include <pthread.h> 13 #include <thread>//使用c++11的多线程 14 15 using namespace std; 16 17 class WebServer 18 { 19 public: 20 WebServer(); 21 ~WebServer(); 22 int ServerInit(u_short port); 23 int

python网络编程-udp

折月煮酒 提交于 2019-12-24 21:10:00
目录 1. 创建socket 2. udp网络程序-发送数据 3. udp网络程序-接收数据 4. python3中的编码转换 5. udp端口绑定 1. 创建socket 在 Python 中 使用socket 模块的函数 socket 就可以完成(大多数的编程语言的套路是相似的): import socket socket.socket(AddressFamily, Type) 说明: 函数 socket.socket 创建一个 socket,该函数带有两个参数: Address Family:可以选择 AF_INET(用于 Internet 进程间通信) 或者 AF_UNIX(用于同一台机器进程间通信),实际工作中常用AF_INET Type:套接字类型,可以是 SOCK_STREAM(流式套接字,主要用于 TCP 协议)或者 SOCK_DGRAM(数据报套接字,主要用于 UDP 协议) 创建一个udp socket(udp套接字): import socket # 创建udp socket udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # ... # 使用套接字收/发数据 # 关闭socket udp_socket.close() 说明: 套接字使用流程 与 文件的使用流程很类似 创建套接字

socket网络编程-粘包

两盒软妹~` 提交于 2019-12-24 14:50:30
1.什么是粘包 只要tcp有粘包现象,udp不会粘包 粘包主要问题是接收方不知道消息之间的界限,不知道一次性提取多少字节的数据而造成的 tcp和dup的区别 1.tcp是基于数据流的,收发的消息不能为空,这酒需要在客户端和服务端都添加空消息的处理机制,防止程序卡主 2.udp是基于数据报,输入发送空内容(直接回车),那也不是空消息,udp协议会帮你封装一个消息头(消息来源地址,端口等信息)即面向消息的通信是有消息保护边界的。 为什么出现粘包 tcp的协议数据不会丢失,是因为没有收完的数据会在基于上次继续接受,已端总是在收到ack时才清楚缓冲区内容,所以数据是可靠,但会出现粘包现象 udp的recvfrom是阻塞的,一个recvfrom(x)必须对应一个sendinto(y),收完x个字节是数据就算完成, 若是y>x那就意味着数据丢失,这意味着udp不会出现粘包,但是数据会丢失,不可靠 3.tcp(传输控制协议) 为什么可靠? tcp是面向连接,面向数据流,提供可靠性服务 tcp传输数据时候先把数据传输到自己缓存,然后通过协议控制将缓存中数据发往对端, 对端返回一个ack=1,发送端则清理缓存中数据 对端返回一个ack=0,则重新发送,所以tcp可靠 2.udp(用户数据报协议)为什么不可靠? udp.是面向无连接的,面向消息流,提供高效率服务 只管把数据发送给对端,不管对端是否收到

使用 acl 生成向导快速创建服务器程序

只愿长相守 提交于 2019-12-24 14:13:38
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 在以前有关使用 acl 的技术文章(如: 使用 acl::master_threads 类编写多进程多线程服务器程序 , 用 acl::master_aio 类编写高并发非阻塞服务器程序 , 使用 acl::master_proc 类编写多进程服务器程序 )中,对如何使用 acl 服务器框架类编写服务器应用程序做了较为详细的描述,但手工输入这些代码毕竟是比较烦人的,在 acl 的 app/ 目录下有一个向导程序:wizard,可以帮助开发者快速生成服务器框架模板,开发者只需在相关位置添加业务逻辑代码即可。下面是使用 wizard 向导程序的简要过程: 首先在 acl 的根目录下编译所有的 acl 的基础库:make all,然后进入 app/wizard 目录生成 wizard 程序:make,运行 ./wizard,出现如下界面: [zsx@localhost wizard]$ ./wizard select one below: m: master_service; d: db; h: http; q: exit # 上面过程提示用户生成哪种应用的程序,我们此处是编写服务器,所以选择:m >m # 接着 wizard 提示我们输入应用程序名称,此处可以写:echo_server please input

~~网络编程(五):粘包现象~~

强颜欢笑 提交于 2019-12-24 12:26:19
进击のpython 网络编程——粘包现象 前面我们提到了套接字的使用方法,以及相关bug的排除 还记得我们提到过一个1024吗? 我们现在要针对这个来研究一下一个陷阱 在研究这个陷阱之前我要先教你几条语句 这是windows的命令啊 ipfonfig 查看本地网卡的ip地址 dir 查看某一个文件夹下的子文件名和子文件夹名 tasklist 查看运行的进程 那我这三条命令怎么执行呢??直接敲?? 好像没什么用,所以说我需要打开我的cmd窗口来键入这些命令 而cmd也就是一个能把特殊的字母组合执行出来的一个程序而已 当我在cmd里键入dir的时候得到的就是这些东西 那我想在编译器里搞这个东西呢? 哦!第一反应就是os模块 import os os.system("dir") 就执行起来了吧 那我这算是拿到结果了吗? 我觉得不算,为什么? 咱们想要达到的效果是我在客户端输入一个dir发送给服务端,服务端给我返回这一堆东西才叫拿到结果了是吧 import os res = os.system("dir") print(f"返回的结果是:{res}") 那结果我打印的是什么呢??是0!那为什么是这个呢? 这个0是代表这个命令是不是成功 如果返回的是0,就是成功了,如果是非零,就是失败了! 所以说他返回的是一个是否成功执行语句的状态,而不是执行语句的返回结果 那os模块就被pass掉了

iOS 网络编程 GET 与 POST

我们两清 提交于 2019-12-24 01:24:39
// // ViewController.m // NetWork 1 // // Created by Lenny on 3/21/15. // Copyright (c) 2015 Lenny. All rights reserved. // #import "ViewController.h" #import "MBProgressHUD+MJ.h" @interface ViewController ()<</span>NSURLConnectionDataDelegate> @property (weak, nonatomic) IBOutlet UITextField *nameField; @property (weak, nonatomic) IBOutlet UITextField *pwdField; - (IBAction)loginBtnClick; @property(nonatomic,strong)NSMutableData * responseData; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; } - (IBAction)loginBtnClick { NSString *username = self.nameField.text;

30、网络编程

試著忘記壹切 提交于 2019-12-24 00:20:41
1、软件开发的架构:   1、C/S:服务器与客户端架构,这种结构是从用户层面(或者物理层面)进行划分的。类似QQ、微信等需要安装应用的桌面应用。   2、B/S:即Browser与服务器端架构,在浏览器上通过HTTP请求访问服务器端的资源。类似百度、知乎等需要浏览器访问能访问服务器。 2、什么是IP地址?   1、IP地址是指互联网协议地址(internet protocal adress,又名网际协议地址),是指计算机在网络上的地址,IP地址与IP协议提供的一种统一的地址协议,它为互联网每一个网络和每一个主机分配一个逻辑地址,以此来屏蔽物理地址的差异。   2、IP地址是一个32位的二进制数,通常被分为4个“8位二进制数”(也就是4个字节),IP地址通常用点分10进制数表示(a,b,c,d)的形式,a,b,c,d都是用0~255之间的整数。 3、端口:   端口英文port,意思是设备与外界通讯交流的入口,网络相关的程序需要开一个端口,为的是能找到某台计算机上唯一的一个程序。   同一台计算机、同一时间,只能有一个程序占用同一个端口。   一般情况下,8000之后的端口能用。 4、互联网协议   互联网协议就是计算机统一的标准,逻辑上把互联网分为四级。     1)IP协议属于互联网osi七层协议中的哪一层? 网络层     2

网络编程

大憨熊 提交于 2019-12-23 17:46:54
一 客户端/服务器架构 1.C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 2.B/S架构 B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 3.socket概念 socket是应用层与TCP/IP协议通信的中间软件抽象层,它是一组接口。在设计模式中, Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在 Socket接口后面,对用户来说,一组简单的接口就是全部,让 Socket去组织数据,以符合指定的协议。 所以,我们无需深入理解tcp/udp协议,socket已经为我们封装好了,我们只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 4.tcp协议和udp协议 TCP (Transmission Control Protocol)可靠的、面向连接的协议(eg:打电话)

网络编程入门

给你一囗甜甜゛ 提交于 2019-12-23 17:41:20
1.套接字(Socket) 1.1基本概念 套接字基于网络进行数据传输的API。实际上就是基于网络的流。 套接字(socket)是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 1.2网络模型 实现c/s通信步骤: 客服端实现: 构造方法 ;Socket(String host, int port)创建一个套接字并将其连接到指定主机上指定的端口号: 参数 : String host指服务器的ip地址 Int port 服务器的端口号 成员方法 :OutputStream() getOutputStream()返回此套接字的输出流 InputStream() getInputStream() 返回此套接字的输入流 close()关闭套接字 实验步骤: 创建一个客服端对象Socket,构造方法绑定服务器的ip地址和端口号 使用Socket对象中的getOutputStream()方法获取网络字节输出流Outputstream的对象 使用网络字节输出流Outputstream的对象的write()方法给服务器发送数据 使用Socket对象中的 getIputputStream(

python学习笔记8:网络编程--requests模块

蹲街弑〆低调 提交于 2019-12-23 13:37:48
python操作网络,也就是打开一个网站,或者请求一个http接口。 使用 requests 模块,pip install requests 安装即可。 requests 模块是基于urllib模块进行开发的,urllib用起来比较麻烦:传参数的话,都得是bytes类型,返回数据也是bytes类型,还得解码。所以我直接丢弃之 一、打开一个网站    二、请求一个接口   1、key-value传参的接口      2、json传参的接口      3、要添加cookie的接口      4、要加header的接口       5、要加权限的接口      6、发送文件    来源: https://www.cnblogs.com/zhangying185/p/7118269.html