套接字

Socket 5大I/O模型

南楼画角 提交于 2020-01-17 06:51:51
如果你想在Windows平台上构建服务器应用,那么I/O模型是你必须考虑的。Windows操作系统提供了选择(Select)、异步选择(WSAAsyncSelect)、事件选择(WSAEventSelect)、重叠I/O(Overlapped I/O)和完成端口(Completion Port)共五种I/O模型。每一种模型均适用于一种特定的应用场景。程序员应该对自己的应用需求非常明确,而且综合考虑到程序的扩展性和可移植性等因素,作出自己的选择。 我会以一个回应反射式服务器(与《Windows网络编程》第八章一样)来介绍这五种I/O模型。 我们假设客户端的代码如下(为代码直观,省去所有错误检查,以下同): #include <WINSOCK2.H> #include <stdio.h> #define SERVER_ADDRESS "137.117.2.148" #define PORT 5150 #define MSGSIZE 1024 #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; SOCKET sClient; SOCKADDR_IN server; char szMessage[MSGSIZE]; int ret; // Initialize Windows socket library

Java网络编程——概念

有些话、适合烂在心里 提交于 2020-01-16 04:21:57
基础 TCP协议 IP协议 TCP/IP UDP协议 端口 套接字 Java.net包 InetAddress类 任何一台运行的Internet上的主机都有IP地址和当地的DNS能够解析的域名 在Java.net包中就提供了IP地址的封装类InetAddress,InetAdress类用于描述和包装一个Internet IP地址,并提供了相关的常见的方法 TCP的网络编程 Socket 重要的Socket API 服务器端程序设计 客户端程序设计 UDP通信概念 UDP通信又称数据包通信,UDP协议采用的是基于数据包的网络通信。数据包是一种分组交换的形式,就是把所有要传送的数据分段打包,再传出去,他是无连接型的,是把打成的每个包都作为独立的报文传出去,所以叫做数据包。 在java的UDP网络程序中,主要用到两个类,java.net.DatagramSocket和java.net.DatagramPacket类,前者是发送和接收数据的数据包套接字,后者是UDP所传输的数据包,即打包后的数据。 TCP协议 TCP (transmission Control protocol) 即传输控制协议,它是传输层协议,主要负责数据得分组和重组,TCP协议是一种可靠的数据传输协议,它是面向连接的,它可以保证数据的传送时间,顺序,和内容的正确无误。但是在保证数据高效的同时,它的传输速度往往是比较慢的

IPC之套接字

陌路散爱 提交于 2020-01-13 20:09:05
IPC(Inter-Process Communication,进程间通信)实现方式   1)管道:     - 管道是一种半双工的通信方式,数据只能单向流动,而且只能在具有亲缘关系的进程之间使用(进程的亲缘关系通常是指父子进程关系)   2)有名管道(FIFO):     - 有名管道也是半双工的通信方式,但是允许在没有亲缘关系的进程之间使用,管道是先进先出的通信方式   3)信号量:     - 信号量是一个计数器,可以用来控制多个进程对共享资源的访问     - 它常作为一种锁机制,防止某进程正在访问共享资源时,其他进程也访问该资源     - 因此,主要作为进程间以及同一进程内不同线程之间的同步手段   4)消息队列:     - 消息队列是有消息的链表,存放在内核中,并由消息队列标识符标识     - 消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点   5)信号 ( Sinal ) :     - 信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生   6)共享内存( Shared Memory) :     - 共享内存就是映射一段能被其他进程所访问的内存,这段共享内存由一个进程创建,但多个进程都可以访问     - 共享内存是最快的IPC实现机制,它是针对其它进程间通信方式运行效率低而专门设计的     -

java之网络通信

折月煮酒 提交于 2020-01-13 06:04:15
TCP通信的客户端:向服务器发送连接请求,给服务器发送数据,读取服务器回写的数据 表示客户端的类 java.net.Socket:此类实现客户端套接字(也可以就叫“套接字)。套接字是两台机器间通信的端点 套接字:包含了rP地址和端口号的网单位 构造方法 : Socket( String host, int port) 创建一个流套接字并将其连接到指定主机上的指定端口号。 参数:String host:服务器主机的名称/服务器的ip地址 int port:服务器的端口 成员方法: OutputStream getOutputStream()返回此套接字的输出流 InputStream getInputStream()返回此套接字的输入流 void close()关闭此套接字。 实现步骤: 1.创建一个客户端对象 Socket,构造方法绑定服务器的P地址和端口号 2.使用Socket对象中的方法getOutputStream()获取网络字节输出流OuputStream对象 3.使用网络字节输出流 OutputStream对象中的方法write,给服务器发送数据 4.使用 Socket中的方法 getInputStream()获取网络字节输入流 InputSteam对象 5.使用网络字节输入流 InputStreami对象中的方法read,读取服务器回写的数据 6. 释放资源(

神奇的socket通信

心已入冬 提交于 2020-01-13 04:11:58
文章目录 socket简介 什么是socket socket的udp协议应用 socket的TCP协议应用 socket的中的TCP协议与UDP协议的不同点 socket简介 socket诞生解决了网络上一个重要的问题,就是完美的保障了通信的准确性,目前网络上各种各样的服务大多都是基于Socket来完成通信的,可见socket在通信中举足轻重。 什么是socket 我们目前的生活中互联网每一秒都传送着大量的信息,怎么才能准确通信呢? 我们先从标识一个进程开始吧,在一台电脑设备上当我们每打开一个应用的时候系统就会产生一个运行着的进程并且给这个进程了一个唯一标识,但是这个标识只是电脑上区分不同应用的标识,在协议中在网络层可以通过“ip地址”唯一的标识网络中的主机设备,在传输层中可以通过“协议和端口号”唯一标识网络中的进程,这样一来为了更好准确的标记与进程进行交互这时神奇的socket诞生了,那它到底神奇在哪里呢? 大多就是利用“ip地址,协议,端口”准确而一部到位的通信,简单点说就是进程之间数据完美共享。 socket的udp协议应用 首先我们先通过图来说明一下流程: 这样一来我们先用代码来解决用UDP客户端给服务端发消息代码如下: 客户端: #服务器的地址和端口 #ip_port=(("10.1.12.51",8000)) while True : content = input (

准确理解SO_REUSEADDR

二次信任 提交于 2020-01-12 17:25:34
默认情况下,套接字不同一个正在使用的本地地址绑定到一起。但在少数情况下,仍有必要以这种方式,来实现对一个地址的重复利用。每个连接都是通过它的本地及远程地址的组合,“独一无二”地标识出来的。针对我们想要连接的地址,只要能用极其细微的差异(比如TCP/IP中采用不同的端口号),来维持这种“独一无二”或者“唯一”的特点,绑定便是允许的。 唯一例外的是监听套接字。两个独立的套接字不可与同一个本地接口(在TCP/IP的情况下,则是端口)绑定到一起,以等待进入的连接通知。假定两个套接字都在同一个端口上进行监听,那么到底由谁来接收一个进入连接通知呢?对于这个问题,目前尚无一种正式规范提出了解决方案。在TCP的环境下,假如服务器关闭,或异常退出,造成本地地址和端口均进入TIME_WAIT状态,那么SO_REUSEADDR 这个套接字选项便显得非常有用。在TIMEWAIT状态下,其他任何套接字都不能与那个端口绑定到一起。但假若设置了该选项,服务器便可在重新启动之后,在相同的本地接口及端口上进行监听。 来源: https://www.cnblogs.com/crunchyou/p/3487489.html

socket套接字 基于TCP协议的socket通信 单个客户与服务端通信 通信循环 通信,连接循环 利用socket完成获取远端命令的示例 subprocess模块的使用

半城伤御伤魂 提交于 2020-01-11 16:23:57
day28 一丶socket套接字 什么是socket套接字: 专业理解: socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口,Socket其实就是使用一个门面模式(门面模式要求一个子系统的外部与其内部的通信必须通过一个统一的门面(Facade)对象进行。门面模式提供一个高层次的接口,使得子系统更易于使用), 它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部.让socket去组织数据. 简易理解:socket就是一个模块,封装了网络通信所需要的所有东西.通过调用socket模块实现两个进程之间的连接和通讯.(也可称为:IP+Port , IP用于表示互联网中的一台主机的位置,而port则是定位到这个机器上的某个程序.) socket套接字的History 套接字起源于 20 世纪 70 年代加利福尼亚大学伯克利分校版本的 Unix,即人们所说的 BSD Unix。 因此,有时人们也把套接字称为“伯克利套接字”或“BSD 套接字”。一开始,套接字被设计用在同 一台主机上多个应用程序之间的通讯。这也被称进程间通讯,或 IPC。套接字有两种(或者称为有两个种族),分别是基于文件型的和基于网络型的。 两个种族: 1.基于网络类型的套接字:AF_INET (还有AF_INET6被用于ipv6,还有一些其他的地址家族,不过

socket套接字——TCP服务器实现

|▌冷眼眸甩不掉的悲伤 提交于 2020-01-11 01:50:47
TcpServer.py import socket from time import ctime HOST='localhost' PORT=5008 BUF_SIZE=1024 ADDRESS=(HOST,PORT) if __name__=='__main__': #新建socket连接 server_socket=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #将套接字与指定的ip和端口相连 server_socket.bind(ADDRESS) #启动监听,并将最大连接数设置为5 server_socket.listen(5) print("[***] 正在监听: %s:%d"%(HOST,PORT)) #setsockopt()函数用来设置选项,结构是setsocketopt(level,optname,value) #level定义了哪个选项将被使用,通常是SOL_SOCKET,意思是正在使用的socket选项 #socket.SO_REUSEADDR表示socket关闭后,本地端用于该socket的端口号立刻就可以被重用 #通常来说,只有经过系统定义一段时间后才能被重用 server_socket.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1) while

I

前提是你 提交于 2020-01-10 22:58:26
一、Linux协议栈总结   本课程重点关注传输层协议和socket以及内核初始化和相关函数调用,顺序如下, 试题主要也是按照此顺序编写   Linux网络总体结构 ---> TCP/IP简介 ---> socket和Linux内核函数调用 ---> IP ---> ARP ---> L2 Switching(二层交换机) ---> DNS   1. linux网络总体结构           2. TCP/IP   网络协议通常分不同层开发,每一层分别负责不同的通信功能。   一个协议族,比如TCP/IP,是一组不同层次上的多个协议的组合。 通常被认为是一个四层协议系统,如下图       TCP/IP协议族中不同层次的协议如下:        TCP和UDP是两种最为著名的运输层协议,二者都使用 IP 作为网络层协议。     TCP使用不可靠的IP服务,但它却提供一种可靠的运输层服务     UDP为应用程序发送和接收数据报, 但它是不可靠的      IP是网络层上的主要协议,同时被TCP和UDP使用。     TCP和UDP的每组数据都通过端系统和每个中间路由器中的I P层在互联网中进行传输。      ICMP是IP协议的附属协议。IP层用它来与其他主机或路由器交换错误报文和其他重要信息。      ARP(地址解析协议)是某些网络接口使用的特殊协议

如何评测一个软件工程师的计算机网络知识水平与网络编程技能水平?

守給你的承諾、 提交于 2020-01-10 22:53:59
一、如何评测软件工程师的计算机网络知识水平与网络编程技能水平 需要了解知悉计算机网络的基本知识和原理。了解计算机网络的发展、功能和组成,计算机网络的体系结构、OSI参考模型、TCP/IP模型,通信基础等。 需要有动手操作实践代码的能力。熟悉Linux Socket网络编程,追踪了解Socket API与系统调用的关系等。 二、简要总结网络协议栈 Linux下网络协议栈分析 三、试题 选择题 1.在OSI参考模型的物理层、数据链路层、网络层传送的数据单位分别为 (A) A、比特、帧、分组 B、比特、分组、帧 C、帧、分组、比特 D、分组、比特、帧 2.计算机网络中使用最广泛的交换技术是(C ) A.电路交换 B.报文交换 C.分组交换 D.线路交换 3.ARP 协议的功能是(A) A.根据 IP 地址查询 MAC 地址 B.根据 MAC 地址查询 IP 地址 C.根据域名查询 IP 地址 D.根据 IP 地址查询域名 4.【2009年408真题】在OSI参考模型中,自下而上第一个提供端到端服务的层次是 (B) A、数据链路层  B、传输层 C、会话层  D、应用层  5.【2012考研真题】对地址转换协议(ARP)描述正确的是(B) A、ARP封装在IP数据报的数据部分 B、ARP是采用广播方式发送的 C、ARP是用于IP地址到域名的转换 D、发送ARP包需要知道对方的MAC地址