套接字

关于Tinyhttpd最全注释解析

我是研究僧i 提交于 2019-11-28 08:37:39
#include <stdio.h> #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <arpa/inet.h> #include <unistd.h> #include <ctype.h> #include <strings.h> #include <string.h> #include <sys/stat.h> #include <pthread.h> #include <sys/wait.h> #include <stdlib.h> #include <stdint.h> #include "/usr/include/mysql/mysql.h" #define ISspace(x) isspace((int)(x)) #define SERVER_STRING "Server: zkphttpd/0.1.0\r\n" #define STDIN 0 #define STDOUT 1 #define STDERR 2 void search_mysql(int, char*); void accept_request(void *); void bad_request(int); void cat(int, FILE *); void cannot_execute

套接字简单通信

戏子无情 提交于 2019-11-28 07:24:00
服务端: #!/usr/bin/env python# -*- coding: utf-8 -*-import socketphone = socket.socket(socket.AF_INET, socket.SOCK_STREAM)phone.bind(('192.168.1.113', 8090))phone.listen(10)connt , client = phone.accept()print('starting ....')print(client)while True: data = connt.recv(1024) print( data.decode('utf-8')) msg = input('>>>:').strip() connt.send(msg.encode('utf-8'))connt.close()phone.close()客户端: #!/usr/bin/env python# -*- coding: utf-8 -*-import socketphone1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)phone1.connect(('192.168.1.113',8090))while True: msg = input('>>>:').strip() phone1.send(msg

谈谈Netty的线程模型

坚强是说给别人听的谎言 提交于 2019-11-28 07:16:50
一、前言 Netty是一个异步、基于事件驱动的网络应用程序框架,其对 Java NIO进行了封装,大大简化了 TCP 或者 UDP 服务器的网络编程。其应用还是比较广泛的,比如Apache Dubbo 、Apache RocketMq、Zuul 2.0服务网关、Spring WebFlux、Sofa-Bolt 底层网络通讯都是基于 Netty 来实现的,本节我们谈谈Netty4中的线程模型。 二、 Netty的线程模型 如上图下侧为Netty Server端,当NettyServer启动时候会创建两个NioEventLoopGroup线程池组,其中boss组用来接受客户端发来的连接,worker组则负责对完成TCP三次握手的连接进行处理;如上图每个NioEventLoopGroup里面包含了多个NioEventLoop,每个NioEventLoop中包含了一个NIO Selector、一个队列、一个线程;其中线程用来做轮询注册到Selector上的Channel的读写事件和对投递到队列里面的事件进行处理。 当NettyServer启动时候会注册监听套接字通道NioServerSocketChannel到boss线程池组中的某一个NioEventLoop管理的Selector上,然后其对应的线程则会负责轮询该监听套接字上的连接请求;当客户端发来一个连接请求时候

Linux Socket编程

…衆ロ難τιáo~ 提交于 2019-11-28 06:41:33
  最近搭建了一个Linux服务器做FTP网盘,突发奇想写写Linux程序(不然岂不浪费了一台电脑???),因为是Linux程序,肯定是作为服务器端运行啦,服务器程序怎么离得开Socket咧?所以呢,先在Linux下写个简单的ECHO小试鸡刀(/捂脸)。      其实Linux Socket编程跟Windows差不多,最底层还是socket、bind、listen、accept/connect这些函数。不一样的大概就四个地方: 1、头文件——在Windows下,所有Socket函数都包含在WinSock.h下,而在Linux下就不一样了,socket函数在<sys/types.h>和<sys/socket.h>下,close函数则在<unistd.h>下。不同的函数可能包含在众多不同的头文件下(实在是记不住啊,还好Linux下有man,不然真得撞墙了)。 2、动态链接库——众所周知在Windows下写网络程序,都需要链接Ws2_32.dll。而在Linux下不需要。 3、关闭socket对象函数——在Windows下SOCKET对象用完之后要调用closesocket将其释放掉,而在Linux下同样也需要释放,不同的是调用的函数不一样,Linux下调用close函数。 4、套接字结构体——在Windows下,socket返回的是SOCKET,而在Linux下

Socket编程指南及示例程序

不羁的心 提交于 2019-11-28 06:35:01
1 前言 在一些常用的编程技术中, Socket 网络编程可以说是最简单的一种。而且 Socket 编程需要的基础知识很少,适合初学者学习网络编程。目前支持网络传输的技术、语言和工具繁多,但是大部分都是基于 Socket 开发的,虽说这些“高级”的网络技术屏蔽了大部分底层实现,号称能极大程度的简化开发,而事实上如果你没有一点 Socket 基础,要理解和应用这些技术还是很困难的,而且会让你成为“半瓢水”。 深有感触的是当年我学习 CORBA 的时候,由于当时各方面的基础薄弱,整整啃了半年书,最终还是一头雾水。如果现在让我带一个人学 CORBA ,我一定会安排好顺序:首先弄清 C++ 语法;然后是 VC 编译环境或者 nmake 的用法;接下来学习一些网络基础知识;然后是 Socket 编程;这些大概要花费 3 、 4 个月。有了这些基础学习 CORBA 一周即可弄懂,两个月就可以基于 CORBA 进行开发了。 好了,说了半天其实中心思想就一个, Socket 很简单,很好学!如果你会 C++ 或者 JAVA ,又懂一点点网络基础如 TCP 和 UDP 的机制,那么你看完本文就可以熟练进行 Socket 开发了。 2 Socket 简介(全文摘抄) (本节内容全部抄自网络,不保证正确性,有兴趣的可以看看!) 80 年代初,美国政府的高级研究工程机构( ARPA )给加利福尼亚大学

python socket编程

倖福魔咒の 提交于 2019-11-28 06:34:48
python socket编程 弄懂HTTP、Socket、TCP这几个概念 Client和Server实现通信 Socket流程图 Socket 类型 Socket 函数 Socket编程思路 server与client之间通信的案例 Socket实现聊天和多用户链接 Socket模拟HTTP请求 弄懂HTTP、Socket、TCP这几个概念 Socket本身不是属于计算机网络中的协议,更像是一个API Socket是用于连接应用层和传输层,Socket可以使我们自己的应用跳过应用层,直接和TCP打交道,就可以实现自己的应用层协议 HTTP和TCP才是属于计算机网络中的协议 HTTP是属于应用层中的协议 Client和Server实现通信 Socket流程图 Socket 类型 套接字格式: socket(family,type[,protocal]) 使用给定的地址族、套接字类型、协议编号(默认为0)来创建套接字。 socket类型 描述 socket.AF_UNIX 只能够用于单一的Unix系统进程间通信 socket.AF_INET 服务器之间网络通信 socket.AF_INET6 IPv6 socket.SOCK_STREAM 流式socket , for TCP socket.SOCK_DGRAM 数据报式socket , for UDP socket.SOCK

基于socket实现简单套接字通信

最后都变了- 提交于 2019-11-28 06:00:37
服务端: #!/usr/bin/env python# -*- coding: utf-8 -*-import socket# 1.购买手机phone= socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2.绑定号码phone.bind(('192.168.1.113',8090))# 3.设置接入数量phone.listen(10)# 4.等待接听connt,clit = phone.accept()# 5.收发数据data = connt.recv(1024)connt.send(data.upper())print('接受到的数据',data)# 6.关闭连接connt.close()phone.close()客户端: #!/usr/bin/env python# -*- coding: utf-8 -*-import socket# 1.购买手机phone1 = socket.socket(socket.AF_INET,socket.SOCK_STREAM)# 2.要拨打的号码phone1.connect(('192.168.1.113',8090))# 3.发送接收数据phone1.send('hello'.encode('utf-8'))data1 =phone1.recv(1024)print(data1)# 4

Internet socket和Unix socket

╄→尐↘猪︶ㄣ 提交于 2019-11-28 05:37:30
socket是计算机之间进行通信的一种约定或一种方式。通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也可以向其他计算机发送数据。 UNIX/Linux 中的一切都是文件,为了统一对各种硬件的操作,简化接口,不同的硬件设备也都被看成一个文件。对这些文件的操作,等同于对磁盘上普通文件的操作。 为了表示和区分已经打开的文件,UNIX/Linux 会给每个文件分配一个 ID,这个 ID 就是一个整数,被称为文件描述符(File Descriptor)。例如: 通常用 0 来表示标准输入文件(stdin),它对应的硬件设备就是键盘; 通常用 1 来表示标准输出文件(stdout),它对应的硬件设备就是显示器。 UNIX/Linux 程序在执行任何形式的 I/O 操作时,都是在读取或者写入 一个文件描述符 。一个文件描述符只是一个和打开的文件相关联的 整数 ,它的背后可能是一个硬盘上的 普通文件 、FIFO、管道、终端、键盘、显示器,甚至是一个 网络连接 。 通过 socket() 函数可以创建一个网络连接,或者说打开一个网络文件,socket() 的返回值就是文件描述符。剩下的操作就是对这个文件的操作了 这个世界上有很多种套接字(socket),比如 DARPA Internet 地址(Internet 套接字)、本地节点的路径名(Unix套接字)

网络编程之 tcp服务器(一)

夙愿已清 提交于 2019-11-28 05:26:12
  1、创建套接字   2、bind绑定ip和port   作为服务方,ip port 应该是固定的,所以要绑定;客户端一般不绑定   3、listen使套接字变成监听套接字,即变为被动链接   4、accept等待客户的链接   生活中的电话机“   1、买手机   2、插上手机卡   3、设置成响铃状态,否则别人打电话听不到   4、接听电话-等待别人打进来   **1. **vim 05-tcp服务器.py   思路:用注释搭建流程   def main():   #1、买手机(创建套接字)   #2、插手机卡(绑定 bind ip port)   #3、设置成响铃状态(将套接字由主动变为被动 listen)   #4、等待别人打进来(等待客户链接 accept)   if __name__ == "__main__":   main()   思路:完善代码   命令:   esc进入命令模式,大写的I回到光标所在行的行首-(当按下I后同时也就进入了编辑模式)   大A回到光标所在行的行末   注意:   listen有一个参数,是一个数值,一般写128,参数越大,以后可以连接的客户端越多,参数越小链接的客户端越少,操作系统不同,参数不同影响不同,linux中128 与256与10差别不是很大,一般写128就可以了   。   accept有一个返回值,返回值是一个元组

ioctl操作

随声附和 提交于 2019-11-28 05:14:17
  在本书中有两个地方都对这个函数进行了介绍,其实还有很多地方需要这个函数。ioclt函数传统上一直作为纳西而不适合归入其他精细定义类别的特性的系统接口。网络程序(特别是服务器程序)经常在程序启动执行后使用ioctl获取所在主机全部网络接口的信心,包括:接口地址、是否支持广播、是否支持多播。 #include <unistd.h> int ioctl(int fd,int request,...../* void *arg /); //返回:若成功则为0.失败则我-1 套接字操作 文件操作 接口操作 ARP高速缓存操作 路由表操作 流系统   不但某些ioclt操作和某些fcntl操作功能重叠(譬如把套接字设置为非阻塞),而且某些操作可以使用ioctl以不止一种方式制定(譬如设置套接字的进程组属主)。下表列出了网络相关ioctl请求的request参数以及arg地址必须指向的数据类型。 套接字操作   明确要求套接字ioctl请求有三个,它们都要求ioctl的第三个参数是指向某个整数的一个指针。 SIOCATMARK:如果本套接字的读指针当前位于带外标记,那就通过由第三个参数指向的帧数放回一个非0值,否则返回一个0值。 SIOCGPGRP:通过由第三个参数指向的整数返回本套接字的进程ID或进程组ID,该ID指定针对本套接字的SIGIO或SIGURG信号的接受进程。 SIOCSPGR