socket

socket的简单应用|python

梦想与她 提交于 2020-01-23 17:03:56
创建socket Address Family:可以选择AF_INET(用于Internet进程间通信)或者AF_UNIX(用于同一台机器进程通信),实际工作中常用AF_INET Type:套接字类型,可以是SOCK_STREAM(流式套接字,主要用于TCP协议)或者SOCK_DRGAM(数据报套接字,主要用于UDP协议) 创建一个tcp socket(tcp 套接字) import socket #创建tcp的套接字 s = socket . socket ( socket . AF_INET , socket . SOCK_STREAM ) #不用的时候,关闭套接字 s . close 创建一个udp socket(udp 套接字) import socket s = socket . socket ( socket . AF_INET , socket . SOCK_DGRAM ) s . close ( ) 简单demo #如果输入的数据是exit,那么久退出程序 def main ( ) : #创建一个udp套接字 udp_socket = socket . socket ( socket . AF_INET , socket . SOCK_DGRAM ) while TRUE : send_data = input ( "Please input data" ) if

简单理解Socket

女生的网名这么多〃 提交于 2020-01-23 13:22:58
感谢:http://www.cnblogs.com/dolphinX/p/3460545.html 转自百度经验:http://jingyan.baidu.com/article/08b6a591e07ecc14a80922f1.html 网络由下往上分为   物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。   通过初步的了解,我知道IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层,   三者从本质上来说没有可比性,   socket则是对TCP/IP协议的封装和应用(程序员层面上)。   也可以说,TPC/IP协议是传输层协议,主要解决数据如何在网络中传输,   而HTTP是应用层协议,主要解决如何包装数据。   关于TCP/IP和HTTP协议的关系,网络有一段比较容易理解的介绍:   “我们在传输数据时,可以只使用(传输层)TCP/IP协议,但是那样的话,如果没有应用层,便无法识别数据内容。   如果想要使传输的数据有意义,则必须使用到应用层协议。   应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。   WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。”   而我们平时说的最多的socket是什么呢,实际上socket是对TCP/IP协议的封装

0502 网络编程

会有一股神秘感。 提交于 2020-01-23 05:56:14
复习:正则模块 正则表达式 元字符 : . 匹配除了回车以外的所有字符 \w 数字字母下划线 \d 数字 \n \s \t 回车 空格 和 tab ^ 必须出现在一个正则表达式的最开始,匹配开头 $ 必须出现在一个正则表达式的最后,匹配结尾 | 或 a|b 要么取左边的要么取右边的 ()|() 分组中的或 一定是长的在前面 短的在后面 [] 在同一个位置上可能出现的所有字符都放在组里 [^] 在同一个位置上不能出现的所有字符都放在组里 () 对于一整个组做量词约束 ; python 分组优先 量词 : * 0、多次 + 1、多 ? 0、1 {} 具体的 {n},{n,m},{n,} 问好的用法 惰性匹配 : 量词+? 表示使用惰性匹配 分组优先 findall split ;取消分组优先 (?:。。。) 分组命名 (?P<name>...) import re ret=re.findall(r"\d+","1-2*(60+(-40.35/5)-(-4*3))") print(ret) 有的时候 不想要的内容需要被匹配出来 你不想要的东西包含着你想要的东西 ret=re.findall(r"\d+\.\d+|(\d+)","1-2*(60+(-40.35/5)-(-4*3))") ret.remove('') print(ret) 二、网络编程 软件开发的两种架构 应用类:qq、微信

tcp_server_协程gevent版本

牧云@^-^@ 提交于 2020-01-23 05:37:39
#!/usr/bin/env python # -*- coding:utf-8 -*- # @Time : 2020/1/23 1:50 # @Author : liuyan # @File : test5_tcp_server_5协程gevent版本.py # @Software: PyCharm import gevent from gevent import monkey; monkey.patch_all() #使用此方法,会将代码中检查一遍,如有time.sleep()等延时方法,会自动转换为gevent.sleep() #在执行时动态替换,通常是在startup的时候. #把标准库中的thread/socket等给替换掉.这样我们在后面使用socket的时候能够跟寻常一样使用,无需改动 # 调用此函数就不需要将time.sleep()手动换为gevent.sleep(),socket也不需要手动替换 # gevent的优势不仅仅是在代码中调用方便,厉害的是它拥有的monkey机制。 # 假设你不愿意修改原来已经写好的python代码,但是又想充分利用gevent机制,那么你就可以用monkey来做到这一点。 # 你所要做的就是在文件开头打一个patch,那么它就会自动替换你原来的thread、socket、time、multiprocessing等代码

socket网络编程快速上手(一)

回眸只為那壹抹淺笑 提交于 2020-01-23 05:35:18
工作以来,写了很多socket相关的代码。磕磕碰碰,走了很多弯路,也积累了一些东西,今天正好整理一下。为了证明不是从书上抄来的,逻辑会有点乱(借口,呵呵)!知识点的介绍也不会像书上说的那么详细和精准,毕竟个人水平也就这样了。当然,主要还是以上手为主,不过分剖析原理性内容。一些陌生的函数要用到的头文件,使用man查看一下就能解决了。既然该文的名称为“快速上手”,那个人认为下述内容都不存在水分,都是必须要掌握的,一点都不能急躁! 一、socket连接流程: 对于程序员来说,开始的时候只会把socket编程当成一个工具,尽快上手,尽快解决战斗。于是乎最关心的就是socket那些函数的调用顺序,那就先给出UDP/TCP的流程图(从《UNIX网络编程》)吧: 有了流程图,再找一些资料,就很容易写出下面这样的代码(以TCP为例): 服务器程序: 1 #include <stdio.h> 2 #include <stdlib.h> 3 #include <string.h> 4 #include <unistd.h> 5 #include <sys/types.h> 6 #include <sys/socket.h> 7 #include <netinet/in.h> 8 #include <arpa/inet.h> 9 10 #define PORT 1234 11 #define

解决No stream arrays were passed in XX问题

和自甴很熟 提交于 2020-01-23 03:00:51
$socket = stream_socket_server("tcp://{$this->host}:{$this->port}", $errno, $error); $socket OR die($errno.':'.$error.PHP_EOL); stream_set_blocking($socket, false); $fd_key = (int)$socket; $read = [$fd_key => $socket]; while (1){ $ret = stream_select($read, $write, $except, 0, $this->timeout); if($ret){ $this->accept($read[$fd_key]); }else{ usleep($this->timeout); } } 调整成 ​ $socket = stream_socket_server("tcp://{$this->host}:{$this->port}", $errno, $error); $socket OR die($errno.':'.$error.PHP_EOL); stream_set_blocking($socket, false); while (1){ $fd_key = (int)$socket; $read = [$fd_key =>

docker网络配置方法总结

孤街浪徒 提交于 2020-01-23 01:49:02
1. docker报【Error response from daemon: Error running DeviceCreate (createSnapDevice) dm_task_run failed】错 解决办法: # systemctl stop docker.service # thin_check /var/lib/docker/devicemapper/devicemapper/metadata If there were no errors then proceed with: # thin_check --clear-needs-check-flag /var/lib/docker/devicemapper/devicemapper/metadata # systemctl start docker.serviceIf there were errors, you are on your own, but 'man thin_check' and 'man thin_repair' may be helpful... ======================================================== 2. docker默认添加的iptables(ip相关的自己定制): docker nat表部分: docker0IP=

网络编程——TCP和UDP编程模型(TCP/UDP服务器和客户端-实现代码)

天大地大妈咪最大 提交于 2020-01-23 00:37:14
网络编程及其编程环境 : 通信连接: 局域网拓扑图: 广域网拓扑图: 编程环境:vim,linux,..... TCP和UDP编程模型 1,传输层TCP和UDP 1)OSI七层模型 2)TCP协议 :传输控制协议,向用户进程提供可靠的全双工字节流 3)UDP协议:用户数据报协议,是一种无连接的协议,不可靠传输 2,TCP编程模型 1)客户端 2)服务器 例子1:socket()实现进程间通信,AF_UNIX (1)服务器端;server.c #include<stdlib.h> #include<stdio.h> #include<unistd.h> #include<sys/types.h> #include<sys/socket.h> #include<sys/un.h> int main() { int serverfd,clientfd; struct sockaddr_un server,client; int client_len=sizeof(client); //initial server.sun_family = AF_UNIX; strcpy(server.sun_path,"mysocketunix"); //socket serverfd=socket(AF_UNIX,SOCK_STREAM,0); if(serverfd ==-1) { printf(

BIO、NIO、AIO 个人总结

柔情痞子 提交于 2020-01-22 20:54:47
BIO(blocking io) BIO即为阻塞IO,在网络编程中,它会在建立连接和等待连接的对端准备数据阶段进行阻塞。因此为了支撑高并发的用户访问,一般会为每一个socket 连接分配一个线程。但使用的瓶颈更加明显,无法支持上百万、甚至千万以上的并发。且线程切换带来的开销也更大。 代码示例: Server端 Server 端绑定 8082 端口 通过 accept() 方法 阻塞等待客户端建立连接 当与客户端建立一个 socket 连接通道之后,server 端口将新建一个线程进行 【读】 、【写】 ( ps: 这里的读是阻塞的,因为当server端发起读的请求时, 如果此时对端未准备好数据,那么将一直阻塞等待 。 直到:1. 对端通过 socket 发送数据2. 将数据从内核态 拷贝到用户态 ) try { // 绑定本地 8082 端口 ServerSocket server = new ServerSocket(8082); while (true) { //阻塞等待客户端 socket 建立连接 Socket accept = server.accept(); Thread t = new Thread(new Runnable() { @Override public void run() { // 一个线程处理一个socket 连接 BufferedReader

Python原始套接字编程

拈花ヽ惹草 提交于 2020-01-22 20:33:47
摘自:https://www.cnblogs.com/yjunzhang/p/http_raw_socket.html 在实验中需要自己构造单独的HTTP数据报文,而使用SOCK_STREAM进行发送数据包,需要进行完整的TCP交互。 因此想使用原始套接字进行编程,直接构造数据包,并在IP层进行发送,即采用SOCK_RAW进行数据发送。 使用SOCK_RAW的优势是,可以对数据包进行完整的修改,可以处理IP层上的所有数据包,对各字段进行修改,而不受UDP和TCP的限制。 下面开始构造HTTP数据包, IP层和TCP层使用python的 Impacket 库,http内容自行填写。 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 #!/usr/bin/env python #------------------------------------------------------------------------------- #