套接字

python之网络编程(socket)

≡放荡痞女 提交于 2019-12-23 13:02:27
目录 一、socket介绍 二、方法说明 三、实例 四、粘包 五、socketserver实现并发 一、socket介绍 socket通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄,应用程序通常通过"套接字"向网络发出请求或者应答网络请求。 socket起源于Unix,而Unix/Linux基本哲学之一就是“一切皆文件”,对于文件用【打开】【读写】【关闭】模式来操作。socket就是该模式的一个实现,socket即是一种特殊的文件,一些socket函数就是对其进行的操作(读/写IO、打开、关闭) socket和file的区别: file模块是针对某个指定文件进行【打开】【读写】【关闭】 socket模块是针对 服务器端 和 客户端Socket 进行【打开】【读写】【关闭】 二、方法说明 import socket socket.socket(socket_family,socket_type,protocal=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

浅说套接字socket做个小小的监控

﹥>﹥吖頭↗ 提交于 2019-12-23 12:47:42
socket 的简介 网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。 Socket的英文原义是“孔”或“插座”。作为BSD UNIX的 进程通信 机制,取后一种意思。通常也称作" 套接字 ",用于描述IP地址和端口,是一个通信链的句柄,可以用来实现不同虚拟机或不同计算机之间的通信。在Internet上的 主机 一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个Socket,并绑定到一个端口上,不同的端口对应于不同的服务。Socket正如其英文原意那样,像一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务 工作的原理 脚本的工作的一些知识 socket模块的操作 datetime模块的操作 文件操作 while 循环 if 判断 列表操作 服务器的代码: #!/usr/bin/python import SocketServer import datetime host_status={} f=open('client.txt') while 1: line=f.readline().split() if len(line)==0:break host_status[line[0]]

python 网络编程

[亡魂溺海] 提交于 2019-12-23 10:49:35
什么是socket? Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。所以无需深入理解tcp/udp协议,因为socket已经封装好了,使用者只需要遵循socket的规定去编程,写出的程序自然就是遵循tcp/udp标准的。 ps:ip是用来标识互联网中的一台主机的位置,而port是用来标识这台机器上的一个应用程序,ip地址是配置到网卡上的,而port是应用程序开启的,ip与port的绑定就标识了互联网中独一无二的一个应用程序 套接字分类 基于文件类型的套接字家族:AF_UNIX unix一切皆文件,基于文件的套接字调用的就是底层的文件系统来取数据,两个套接字进程运行在同一机器,可以通过访问同一个文件系统间接完成通信 基于网络类型的套接字家族:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过,他们要么是只用于某个平台,要么就是已经被废弃,或者是很少被使用,或者是根本没有实现,所有地址家族中,AF_INET是使用最广泛的一个,python支持很多种地址家族,但是由于我们只关心网络编程,所以大部分时候我么只使用AF_INET。 套接字工作流程

Python学习笔记九(UDP套接字和并发编程)

霸气de小男生 提交于 2019-12-23 05:46:02
一、UDP套接字 服务端 from socket import * server = socket(AF_INET,SOCK_DGRAM) server.bind(("127.0.0.1",8080)) while True: data,client_addr = server.recvfrom(1024) server.sendto(data.upper(),client_addr) 客户端 from socket import * client = socket(AF_INET,SOCK_DGRAM) while True: msg = input(">>").strip() client.sendto(msg.encode("utf-8"),("127.0.0.1",8080)) data,server_addr = client.recvfrom(1024) print(data.decode("utf-8")) 二、进程相关定义 进程是指程序的运行过程。每个进程都拥有自己的地址空间、内存、数据栈以及其他用于跟踪执行的辅助数据。 多道技术:内存中同时存入多个程序,cpu从一个进程快速切换到另一个,使得每个进程各自运行几十或几百毫秒,虽然在一个时刻,一个cpu只执行了一个任务,但1秒内,cpu却可以运行多个进程,给人带来并行的错觉,即伪并发

Socket 编程

风流意气都作罢 提交于 2019-12-23 05:35:44
套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据,可对其进行像对文件一样的打开、读写和关闭等操作。套接字允许应用程序将I/O插入到网络中,并与网络中的其他应用程序进行通信。网络套接字是IP地址与端口的组合。 传输层 实现 端到端 的通信,因此,每一个传输层连接有两个端点。那么,传输层连接的端点是什么呢?不是 主机 ,不是主机的 IP地址 ,不是应用进程,也不是传输层的协议端口。传输层连接的端点叫做套接字(socket)。 根据RFC793的定义: 端 口号 拼接到IP地址就构成了套接字。所谓套接字,实际上是一个通信端点,每个套接字都有一个套接字序号,包括主机的IP地址与一个16位的主机端口号,即形如(主机IP地址:端口号)。例如,如果IP地址是210.37.145.1,而端口号是23,那么得到套接字就是(210.37.145.1:23)。 总之,套接字Socket=(IP地址:端口号),套接字的表示方法是点分十进制的IP地址后面写上端口号,中间用冒号或逗号隔开。每一个传输层连接唯一地被通信两端的两个端点(即两个套接字)所确定。 套接字可以看成是两个网络应用程序进行通信时,各自通信连接中的一个端点。通信时,其中的一个网络应用程序将要传输的一段信息写入它所在主机的Socket中,该Socket通过网络接口卡的传输介质将这段信息发送给另一台主机的Socket中

【网络编程二】网络通信常用的函数总结

旧城冷巷雨未停 提交于 2019-12-23 03:45:04
1、函数socket 函数原型: i nt s ocket(int domain, int type, int protocol) ; 参数说明: domain :协议域,又称协议族(family)。常用的协议族有AF_INET、AF_INET6、AF_LOCAL(或称AF_UNIX,Unix域Socket)等。协议族决定了socket的地址类型,在通信中必须采用对应的地址,如AF_INET决定了要用ipv4地址(32位的)与端口号(16位的)的组合、AF_UNIX决定了要用一个绝对路径名作为地址。 type :指定Socket类型。常用的socket类型有SOCK_STREAM、SOCK_DGRAM等。流式Socket(SOCK_STREAM)是一种面向连接的Socket,针对于面向连接的TCP服务应用。数据报式Socket(SOCK_DGRAM)是一种无连接的Socket,对应于无连接的UDP服务应用。 protocol :指定协议。常用协议有IPPROTO_TCP、IPPROTO_UDP等,分别对应TCP传输协议、UDP传输协议。 注意:type和protocol不可以随意组合,如SOCK_STREAM不可以跟IPPROTO_UDP组合。当第三个参数为0时,会自动选择第二个参数类型对应的默认协议。 返回值: 如果调用 成功就返回新创建的套接字的描述符 ,如果 失败

UNIX网络编程之套接字API

南笙酒味 提交于 2019-12-23 03:44:47
套接字相关函数 int socket(int family, int type, int protocol); 该接口创建一个套接字 family指定协议族(通常是AF_INET);type参数指定socket的类型:SOCK_STREAM、SOCK_DGRAM、SOCK_RAW;protocol通常赋值"0"。 int bind(int sockfd, struct sockaddr *my_addr, int addrlen); 将套接字绑定到IP地址和端口 struct sockaddr_in { short sin_family; u_short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 一个绑定的实例: struct sockaddr_in saddr; memset((void *)&saddr,0,sizeof(saddr)); saddr.sin_family = AF_INET; saddr.sin_port = htons(8888);端口号要大于1024 saddr.sin_addr.s_addr = htonl(INADDR_ANY); 绑定到本地IP //saddr.sin_addr.s_addr = inet_addr("192.168.22.5"); 绑定固定IP bind

linux下的网络编程接口

谁说我不能喝 提交于 2019-12-23 03:41:31
LINUX 网络编程接口 --------------------------------------------------------------------------- linux 支持的网络编程接口: UNIX: unix域套接字接口 INET: Internet地址族TCP/IP支持通信 AX25: AMATERUR RADIO X25 IPX: Novell IPX APPLETALK: Appletalk DDP x25: X25 linux的BSD套接口支持的套接口类型 流失:stream 数据报:DATAGRAM 原始: Raw 数据结构: struct sockaddr{ //这个结构中存储着套接字接口的地址信息 Unsigned short sa_family; //地址家族 char sa_data[14]; //14字节的地址信息 //sa_family的值很多。一般采用AF_INET //sa_data的值包括目标地址和端口 } struct sockaddr_in{ short int sin_family; //address family unsignet short int sin_port; //port number struct in_addr sin_addr; //internet address unsigned char sin

Linux下C语音实现socket发送和接收的小程序

两盒软妹~` 提交于 2019-12-23 03:40:50
1、什么是socket套接字 socket其实就是计算机通信的端口,可以实现两个计算机之间的通信的一个接口,应用程序在网络上传输就是通过这个借口实现。 socket分为三种类型: 字节流套接字(Stream Socket),最常用socket类型,TCP协议使用此类接口。提供面向连接(建立虚拟电路)、无差错、发送顺序一致、无记录边界和非重复的网络信包传输 数据报套接字(Datagram Socket),UDP协议使用此类接口,提供无连接服务,它以独立的信包进行网络传输,信包最大长度为32KB,传输不保证顺序性、可靠性和无重复性,它通常用于单个报文传输或可靠性不重复的场合。数据报套接字接口的一个重要特点是它保留了记录边界。 原始数据报套接字(Raw Socket),提供对网络下层通讯协议(eg:IP协议)的直接访问,一般不是提供给普通用户的,主要用于开发新的协议或者用于提取协议教隐蔽的功能 2、 客户服务器通信流程 创建套接字    #include < sys/types.h > /* See NOTES */   #include < sys/socket.h >   int socket(int domain, int type, int protocol);//返回sockfd   函数定义:这个函数返回套接字描述符,它唯一标识一个socket

套接字编程基础

为君一笑 提交于 2019-12-23 03:40:30
套接字是通信断点的抽象,网络编程中,套接字对于大多数通信细节做了隐藏,使程序员操作起来比较简单。 1、建立和销毁套接字描述符 Linux环境中使用socket函数创建一个套接字,函数原型如下: int socket(int domain,int type,int protocol); 头文件: #include<sys/types.h>、#include<sys/socket.h> 参数说明: 第一个参数domain是通信域,“AF_INET”表示IPv4,“AF_INET6”表示IPv6。 第二个参数是套接口的类型,SOCK_STREAM表示是TCP协议,SOCK_DGRAM表示是UDP协议,SOCK_RAW表示是绕过协议,SOCK_SEQPACKET表示STCP协议。 第三个参数通常设置为0。 返回值: 系统调用socket()只返回一个套接口描述符,如果出错,则返回-1。 2、地址绑定 只有绑定了地址的套接字才能用于网络通信,因此需要将套接字与一个地址绑定,Linux环境下使用bind()函数将一个套接字绑定到一个地址上,函数如下: int bind(int sockfd,struct sockaddr*my_addr,int addrlen); 头文件: #include<sys/types.h>、#include<sys/socket.h> 参数说明: