socket

Python实战笔记(二) 网络编程

老子叫甜甜 提交于 2020-02-06 01:09:26
1、Socket Python 提供 socket 模块用于访问网络服务,使得不同主机之间的进程可以相互通信 socket 模块其实就是 Application 和 TCP/IP 的中间层,使得 Application 可以更加方便地使用 TCP/IP 服务 它封装好底层 TCP/IP 复杂的处理逻辑,并向 Application 提供一组方便使用的接口 2、创建 Socket 对象 socket.socket([family[, type[, proto]]]) family:套接字家族,一般取值如下: socket.AF_INET:不同主机上的网络通信,使用 IPV4 协议 socket.AF_INET6:不同主机上的网络通信,使用 IPV6 协议 socket.AF_UNIX:同一主机上的进程通信 type:套接字类型,一般取值如下: socket.SOCK_STREAM:流套接字,用于 TCP 通信 socket.SOCK_DGRAM:数据报套接字,用于 UDP 通信 socket.SOCK_RAW:原始套接字,用于处理 ICMP、IGMP 等特殊的网络报文 proto:协议编号,默认为 0 3、Socket 对象的常用方法 (1)服务端的常用方法 bind(address) :绑定地址到套接字,address 表示通信地址,格式取决于使用的套接字家族 listen

Linux套接字编程

吃可爱长大的小学妹 提交于 2020-02-06 00:46:31
linux 套接字编程 socket # include <sys/socket.h> int socket ( int family , int type , int protocol ) ; 若成功返回非负描述符,出错返回 - 1 family : 协议族 AF_INET type : 套接字类型 SOCK_STREAM protocol : 协议类型常值 0 connect 客户用connect来建立与TCP服务器的连接 # include <sys/socket.h> int connect ( int sockfd , const struct sockaddr * servaddr , socklen_t addrlen ) ; 成功返回 0 ,出错返回 - 1 sockfd : socket返回的套接字描述符 * servaddr : 指向一个套接字地址结构的指针 ( SA * ) & cliaddr addrlen : 套接字大小 sizeof ( cliaddr ) bind 把一个本地协议地址绑定一个套接字 //服务端 # include <sys/socket.h> int bind ( int sockfd , const struct sockaddr * myaddr , socklen_t addrlen ) ; 成功返回 0 ,出错返回 - 1

tcp_demo

梦想的初衷 提交于 2020-02-05 21:19:33
代码讲解: server 1 import socket 2 3 4 def main(): 5 # 创建tcp服务器套接字 6 tcp_server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 7 # 绑定 8 load_addr = ('', 8000) 9 tcp_server.bind(load_addr) 10 # 监听 11 print('等待客户端接入...') 12 tcp_server.listen(128) 13 # 等待客户端消息 14 client_socket, client_addr = tcp_server.accept() 15 print(str(client_addr) + '接入...') 16 # 接收客户端请求 17 print('等待客户端消息...') 18 client_msg = client_socket.recv(1024) 19 print(client_msg.decode('gbk')) 20 # 回复客户端消息 21 client_socket.send('OK'.encode('gbk')) 22 # 关闭套接字 23 tcp_server.close() 24 client_socket.close() 25 26 27 if __name__ == '_

20175214 《Java程序设计》第11周学习总结

…衆ロ難τιáo~ 提交于 2020-02-05 16:18:33
20175214 《Java程序设计》第11周学习总结 本周学习任务总结 1、根据《java2实用教程》和蓝墨云学习视频学习第十三章; 2、尝试将课本重点内容用自己的话复述手打; 3、输入课本代码并上传码云; 4、使用IDEA调试代码; 教材学习重点内容总结 13.1 URL类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符(Uniform Resource Locator),使用URL创建对象的应用程序称作客户端程序。 一个URL对象通常包含最基本的三部分信息:协议、地址、资源。 13.1.1 URL的构造方法 URL类通常使用如下的构造方法创建一个URL对象: public URL(String spec) throws MalformedURLException public URL(String protocol, String host,String file) throws MalformedURLException 13.1.2 读取URL中的资源 URL对象调用 InputStream openStream() 方法可以返回一个输入流,该输入流指向URL对象所包含的资源。通过该输入流可以将服务器上的资源读入到客户端。 13.2 InetAdress类 13.2.1 地址的表示 Internet上的主机有两种方式表示地址: 1.域名

20165315 第九周学习总结

五迷三道 提交于 2020-02-05 16:18:10
20165315 第九周学习总结 本周学习中遇到的问题和解决过程 在运行教材上例子2时,无法获取IP地址为166.111.222.3的主机域名: 解决过程: 在网页上试着查找这个IP地址,发现网页一直无法加载,可能是这个IP地址已经失效 在运行教材上例子3时,运行Client只能获取如下结果: 解决过程: 一开始以为是未联网造成的,但是联网后发现仍是这个结果,仔细看书后发现,是要先运行Server,再运行Client,就可以正常运行了 在运行教材上例子5的代码时,只能发送信息,无法接收信息: 解决过程: 询问了同学,发现使用windows系统电脑的同学是可以出现正常结果的,可能是mac电脑的原因,我会继续查找原因 在运行教材上例子6的代码时,运行阻塞: 解决过程: 和之前的例子3类似,也是应先运行BroadCast类,再运行Receiver类 学习总结 第十三章 URL 类 URL类是java.net包中的一个重要的类,URL的实例封装着一个统一资源定位符,使用URL创建对象的应用程序称作客户端程序 一个URL对象通常包含最基本的三部分信息 协议 地址 资源 构造方法 public URL(String spec) throws MalformedURLException public URL(String protocol, String host,String file)

【31】常见IO模型浅析 · Qingfeng.Du

独自空忆成欢 提交于 2020-02-05 12:42:12
note:本文以及 《说说Redis的非阻塞IO多路复用技术》 都是NIO学习的预热,本文对常见的四种IO模型进行归纳总结。 常见的IO模型有: 同步阻塞IO(Blocking IO):即传统的IO模型 同步非阻塞IO(Non-blocking IO) IO多路复用(IO Multiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO 异步IO(Asynchronous IO):即经典的Proactor设计模式,也称为异步非阻塞IO 1 同步阻塞IO 简单,就不多说了。 2 同步非阻塞IO 不难,也不多说。 3 IO多路复用 用户首先将需要进行IO操作的socket添加到select中,然后阻塞等待select系统调用返回。当数据到达时,socket被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。 从流程上来看,使用select函数进行IO请求和同步阻塞模型没有太大的区别,甚至还多了添加监视socket,以及调用select函数的额外操作,效率更差。但是,使用select以后最大的优势是用户可以在一个线程内同时处理多个socket的IO请求。用户可以注册多个socket,然后不断地调用select读取被激活的soc 大专栏 【31】常见IO模型浅析 · Qingfeng.Du ket

Socket的I/O模型

不羁岁月 提交于 2020-02-05 11:57:49
IO模型 一个输入操作通常包括两个阶段: 等待数据准备好 从内核向进程复制数据 对于一个套接字上的输入操作,第一步通常涉及等待数据从网络中到达。当所等待数据到达时,它被复制到内核中的某个缓冲区。第二步就是把数据从内核缓冲区复制到应用进程缓冲区。 Unix 有五种 I/O 模型: 阻塞式 I/O 非阻塞式 I/O I/O 复用(select 和 poll) 信号驱动式 I/O(SIGIO) 异步 I/O(AIO) 1.阻塞式I/O 应用进程被阻塞,直到数据从内核缓冲区复制到应用进程缓冲区中才返回。 应该注意到,在阻塞的过程中,其它应用进程还可以执行,因此阻塞不意味着整个操作系统都被阻塞。因为其它应用进程还可以执行,所以不消耗 CPU 时间,这种模型的 CPU 利用率会比较高。 2.非阻塞I/O 应用进程执行系统调用之后,内核返回一个错误码。应用进程可以继续执行,但是需要不断的执行系统调用来获知 I/O 是否完成,这种方式称为轮询(polling)。 由于 CPU 要处理更多的系统调用,因此这种模型的 CPU 利用率比较低。 3.I/O复用 使用 select 或者 poll 等待数据,并且可以等待多个套接字中的任何一个变为可读。这一过程会被阻塞,当某一个套接字可读时返回,之后再使用 recvfrom 把数据从内核复制到进程中。 它可以让单个进程具有处理多个 I/O 事件的能力

最简单的Tcp Udp的例子

岁酱吖の 提交于 2020-02-05 11:25:15
//1.WinSock包含2个主要的版本,即WinSock1和WinSock2.前者需要包含头文件WinSock.h和库文件wsock32.lib,后者需要包含头文件WinSock2.h和库文件ws2_32.lib用于提供对网络相关API的支持。 //2.WSAData结构体的定义 typedef struct WSAData { WORD wVersion; WORD wHighVersion; #ifdef _WIN64 unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; #else char szDescription[WSADESCRIPTION_LEN+1]; char szSystemStatus[WSASYS_STATUS_LEN+1]; unsigned short iMaxSockets; unsigned short iMaxUdpDg; char FAR * lpVendorInfo; #endif } WSADATA, FAR * LPWSADATA; //3.MAKEWORD()

socketopt 函数

我是研究僧i 提交于 2020-02-05 05:24:39
本文转载链接: https://www.cnblogs.com/Ansing/p/5915538.html 功能描述: 获取或者设置与某个套接字关联的选 项。选项可能存在于多层协议中,它们总会出现在最上面的套接字层。当操作套接字选项时,选项位 于的层和选项的名称必须给出。为了操作套接字层的选项,应该 将层的值指定为SOL_SOCKET。为了操作其它层的选项,控制选项的合适协议号必须 给出。例如,为了表示一个选项由TCP协议解析,层应该设定为协议 号TCP。 用法: #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:选项所在的协议层。 optname:需要访问的选项名。 optval:对于getsockopt(),指向返回选项值的缓冲。对于setsockopt(),指向包含新选项值的缓冲。 optlen:对于getsockopt()

在C#中利用Keep-Alive处理Socket网络异常断开的方法

北慕城南 提交于 2020-02-05 05:03:28
  最近我负责一个IM项目的开发,服务端和客户端采用TCP协议连接。服务端采用C#开发,客户端采用Delphi开发。在服务端开发中我碰到了各种各样的网络异常断开现象。在处理这些异常的时候有了一些心得,现在写出来和大家分享一下。 那网络异常断开原因主要有那些呢?归纳起来主要有以下两种: 1、客户端程序异常。   对于这种情况,我们很好处理,因为客户端程序异常退出会在服务端引发ConnectionReset的Socket异常(就是WinSock2中的10054异常)。只要在服务端处理这个异常就可以了。 2、网络链路异常。   如:网线拔出、交换机掉电、客户端机器掉电。当出现这些情况的时候服务端不会出现任何异常。这样的话上面的代码就不能处理这种情况了。对于这种情况在MSDN里面是这样处理的,我在这里贴出MSDN的原文: 如果您需要确定连接的当前状态,请进行非阻止、零字节的 Send 调用。如果该调用成功返回或引发 WAEWOULDBLOCK 错误代码 (10035),则该套接字仍然处于连接状态;否则,该套接字不再处于连接状态。    但是我在实际应用中发现,MSDN说的这种处理方法在很多时候根本无效,无法检测出网络已经异常断开了。那我们该怎么办呢?   我们知道,TCP有一个连接检测机制,就是如果在指定的时间内(一般为2个小时)没有数据传送,会给对端发送一个Keep-Alive数据报