套接字

网络通信: TCP与UDP协议

落爺英雄遲暮 提交于 2020-01-26 15:00:21
主要参考: c++ 网络编程(一)TCP/UDP windows/linux 下入门级socket通信 客户端与服务端交互代码 ; UDP协议的详细解析 ; TCP 详解 文章目录 网络编程和套接字 消息接收过程 消息发送过程 UDP协议 简介 代码实现 TCP协议 简介 代码实现 网络编程和套接字 网络编程 是编写程序使两台 联网的 计算机相互交换数据, 主要依靠操作系统提供的“套接字”部件. 套接字 是用于网络数据传输的软件设备, 如果将网络通信类比为电话机通信系统,那套接字就是电话机, 渠道就是互联网, 和电话拨打或接听一样,套接字也可以发送或接收. 消息接收过程 先有一台电话机: 创建套接字, 即 实例化 int socket(int domain, int type, int protocol); 电话机要有电话号码的问题: 给套接字 绑定 地址信息(IP地址和端口号) int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen); 设置电话机为可接听状态: 设置套接字为 可接听 状态 int listen(int sockfd, int backlog); 接听电话: 套接字 接受 消息 int accept(int sockfd, struct sockaddr *addr, socklen_t

Python网络编程

只谈情不闲聊 提交于 2020-01-26 01:49:50
简介 使用套接字进行网络编程。 网络编程 使用 socket 模块的 socket() 函数,可以创建套接字。 socket 模块函数 要创建套接字,必须使用 socket.socket() 函数,语法如下: socket(socket_family, socket_type, protocol=0) 其中, socket_family 是 AF_UNIX 或 AF_INET , socket_type 是 SOCK_STREAM 或 SOCK_DGRAM 。 protocol 通常省略,默认为 0 。 导入模块 创建 TCP/IP 套接字 tcpSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 创建 UDP/IP 套接字 udpSock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 套接字对象方法 服务器套接字方法 名称 描述 s.bind() 将地址(主机号、端口号对)绑定到套接字上 s.listen() 设置并启动 TCP 监听器 s.accept() 被动接受 TCP 客户端连接,一直等待知道连接到达(阻塞) 客户端套接字方法 名称 描述 s.connect() 主动发起 TCP 服务器连接 s.connect_ex() connect() 的扩展版本

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协议的封装

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 #------------------------------------------------------------------------------- #

Socket的使用

帅比萌擦擦* 提交于 2020-01-22 04:00:33
文章目录 什么是Socket Socket的初始化方式 Socket参数配置 Socket核心方法 ServerSocket的初始化方式 ServerSocket常用方法 示例 什么是Socket Socket也称为"套接字",是网络通信中的概念,是支持TCP/IP协议的网络通信的基本操作单元。它分为流式套接字和用户数据报套接字两种,分别对应于传输层的TCP和UDP协议。TCP协议是一种面向连接的、可靠的、基于字节流的传输层协议,由IETF的RFC793定义。 Socket包含进行网络通信必须的五种信息:连接使用的协议,本地主机的IP地址,本地进程的协议端口,远地主机的IP地址,远地进程的协议端口。 Socket的初始化方式 Socket的初始化用在客户端中,这里介绍几种初始化方式 1.无代理模式创建 //等效于空构造函数 Socket socket = new Socket ( Proxy . NO_PROXY ) ; 2.使用HTTP代理的方式 // 新建一份具有HTTP代理的套接字,传输数据将通过www.baidu.com:8080端口转发 Proxy proxy = new Proxy ( Proxy . Type . HTTP , new InetSocketAddress ( Inet4Address . getByName ( "www.baidu.com" ) ,

setsockopt与getsockopt

自古美人都是妖i 提交于 2020-01-22 01:51:39
函数: # include <sys/types.h> # include <sys/socket.h> int getsockopt ( int sock , int level , int optname , void * optval , socklen_t * optlen ) ; int setsockopt ( int sock , int level , int optname , const void * optval , socklen_t optlen ) ; 参数释义: sock:网络文件描述符 level:选项所在协议层。 如果想要在套接字层面上进行配置,则将此项设置为SOL_SOCKET。 optname:需要访问的选项名 (后面会有)(取决于level) optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。 optlen:对于getsockopt(),作为入口参数时,选项值的最大长度。作为出口参数时,选项值的实际长度。对于setsockopt(),现选项的长度。 函数功能: 获取或设置与某个套接字关联的选项。 level指定控制套接字的层次 . 可以取三种值 : 1 ) SOL_SOCKET : 通用套接字选项 . 2 ) IPPROTO_IP : IP选项 . 3 ) IPPROTO

网络编程——网络基础(二)

旧街凉风 提交于 2020-01-22 01:09:53
Socket是何方妖怪? 1.socket与进程的关系 1).socket与进程间的关系:socket 用来让一个进程和其他的进程互通信息(IPC),而Socket接口是TCP/IP网络的API接口函数。 2).进程间通信(本机内) 进程间通信(不同计算机,要联网) 2、socket与文件的关系——如何理解socket是种特殊的I/O? 1)Socket最先应用于Unix操作系统,如果了解Unix系统的I/O的话,就很容易了解Socket了,因为Socket数据传输其实就是一种特殊的I/O。 2)可对其进行文件操作 3)有文件描述符。而文件描述符的本质是一个非负整数。只是用于区分。类似的还有进程ID。 3.服务器端口与连接个数的关系 1)服务端在8088上监听,然后生成一个新的socket与client通讯。(注意:服务器端监听端口是 不变的,但socket连接可以一直生成,一个线程对应一个socket.) 同一时刻,一个端口只能建立一个连接。 在一个端口监听,但是在监听端口的同时,生成一个等待队列,每一个来自客户端的连接都会送入等待队列中,服务器利用一定的算法进行选择相应的连接请求处理,所以在一个端口可以监听多各请求嘛。如果同时的连接过多,服务器相应每个连接的时间就会相应的变长。就会变慢。 2)QQ的实现方法就是在登陆的时候告诉服务器你已经登陆,发送消息的时候

【案例】多线程实现基于UDP协议的聊天器

限于喜欢 提交于 2020-01-21 11:34:54
博主前言: 在上一篇博客中,我讲述了用多线程的方式实现多任务,结合套接字编程的内容,我们已经具备了实现开发简单的基于UDP协议的聊天功能的程序,本来今天准备写一下多任务的另一种实现方式:多进程。但是今天事情有点多,写写停停思绪也没能集中,所以干脆停笔了,打算明天再写,加油! 整体逻辑: def main ( ) : # 1. 创建udp套接字 udp_socket = socket . socket ( socket . AF_INET , socket . SOCK_DGRAM ) # 2. 套接字绑定一个端口号 udp_socket . bind ( ( "" , 1314 ) ) # 3. 获得通信对方的ip和port dest_ip = input ( "请输入对方的ip:" ) dest_port = int ( input ( "请输入对方的port:" ) ) # 注意强制转换 # 4。 创建两个子线程,一个用于发送数据,一个用于接收数据 t_recv = threading . Thread ( target = recv_msg , args = ( udp_socket , ) ) t_send = threading . Thread ( target = send_msg , args = ( udp_socket , dest_ip , dest_port

UNP——第四章,TCP套接字编程

主宰稳场 提交于 2020-01-20 23:48:50
1.socket 函数   family AF_INET IPv4 AF_INET6 IPv6 AF_LOCAL Unix域 AF_ROUTE 路由套接字 AF_KEY 密钥套接字   type SOCK_STREAM 字节流 SOCK_DGRAM 数据报 SOCK_SEQPACKET 有序分组 SOCK_RAW 原始套接字   AF_INET 和 AF_INET6 的 protocol IPPROTO_TCP IPPROTO_UDP IPPROTO_SCTP (2)AF_xxx 和 PF_xxx   AF_ 表示地址族,PF_xxx 表示协议族,但实际上 AF_ 和 PF_ 相同。 2.connect   connect 指定 目标套接字,   connect 调用时,TCP 发送 SYN   TCP接收到 ACK时,connect 返回。   connect 前,可以不bind,内核会在connect 时随机分配原套接字。   connect 开始时,TCP从 CLOSED --> SYN_SEND,成功时, SYN_SEND --> ESTABLISH   每次 connect 失败后,都必须 close 套接字,并重新调用 socket。 3.bind   设置源套接字地址,   可以指定也可以不指定,不指定内核会分配,   设置为0则为不指定,   指定任意IP时