套接字

winsocket <研究了一天的成果>

我的未来我决定 提交于 2020-03-06 04:32:49
首先,这都是套路( ▼-▼ ) 头文件 #include <WinSock.h> #include <Winsock2.h> 用这个,这个是升级版 各个函数解释 1、 WSAStartup: 初始化套接字环境,本函数必须是应用程序或DLL调用的第一个Windows Sockets函数.它允许应用程序或DLL指明Windows Sockets API的版本号及获得特定Windows Sockets实现的细节.应用程序或DLL只能在一次成功的WSAStartup()调用之后才能调用进一步的Windows Sockets API函数. int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); 实际用例 //begin 初始化网络环境 int err = WSAStartup(MAKEWORD(2, 2), &wsaData); if ( err != 0) { printf("WSAStartup failed with error: %d\n", err); return -1; }//end 2、 WSACleanup: 清理套接字环境,和上面的WSAStartup相反,该函数是在程序不在对任何Windows Sockets函数调用后,用其来清理套接字环境的 int WSACleanup (void); 3、

listen( ) accept( )

吃可爱长大的小学妹 提交于 2020-03-06 04:32:09
服务器端,创建socket,bind绑定套接字后,还需要使用listen()函数让套接字进入被动监听状态,再调用accept()函数,就可以随时响应客户端的请求了 listen() 函数 通过 listen() 函数可以让套接字进入被动监听状态 int listen(int sock, int backlog); //Linux sock 为需要进入监听状态的套接字,backlog 为请求队列的最大长度。 当套接字正在处理客户端请求时,如果有新的请求进来,套接字是没法处理的,只能把它放进缓冲区,待当前请求处理完毕后,再从缓冲区中读取出来处理。如果不断有新的请求进来,它们就按照先后顺序在缓冲区中排队,直到缓冲区满。这个缓冲区,就称为 请求队列(Request Queue) 。 缓冲区的长度(能存放多少个客户端请求)可以通过 listen() 函数的 backlog 参数指定,可以根据你的需求来定, 并发量 小的话可以是10或者20。 如果将 backlog 的值设置为 SOMAXCONN,就由系统来决定请求队列长度,这个值一般比较大,可能是几百,或者更多。当请求队列满时,就不再接收新的请求,对于 Linux,客户端会收到 ECONNREFUSED 错误,对于 Windows,客户端会收到 WSAECONNREFUSED 错误。 注意:listen() 只是让套接字处于监听状态

TCP、UDP有关函数

我与影子孤独终老i 提交于 2020-03-06 01:27:13
首先看一下上一篇三次握手四次挥手文章中提到的原理图。 其中的read对应的就是recv函数,write对应的就是send函数。 步入正题,函数的使用: 1.TCP客户端 socket : 创建套接字 函数原型 : int socket ( int family , int type , int protocol ) ; 功能:创建一个用于网络通信的socket套接字(描述符) 参数 : @family : 协议族 ( AF_INET、AF_INET6、PF_PACKET ) @type : 套接字类 ( SOCK_STREAM、SOCK_DGRAM、SOCK_RAW ) @protocol : 协议类别 ( 0 、IPPROTO_TCP、IPPROTO_UDP ) ( 一般传 0 , 自动匹配 ) 返回值 : 套接字 特点 : 创建套接字时 , 系统不会分配端口。 创建的套接字默认属性是主动的 , 即主动发起服务的请求 ; 当作为服务器时 , 往往需要修改为被动的。 ( listen ) 头文件 : # include <sys/socket.h> connect : 连接“服务器” 函数原型 : int connect ( int sockfd , const struct sockaddr * addr , socklen_t len ) ; 功能 : 主动跟服务器建立链接

Python 网络编程之 TCP 与 UDP

血红的双手。 提交于 2020-03-05 23:35:22
Socket(套接字) 介绍 UDP 和 TCP 协议之前,先熟悉下 socket 的基本概念。 基本概念 Socket 是通信的基石,是支持 TCP/IP 协议的网络通信的基本操作单元,在网络通信过程中端点的一种抽象表示。网络中使用 Socket 传输数据是一种特殊的网络 I/O。 工作模式 打开open -> 读写write/read -> 关闭close 五种信息 socket 包括了数据传输必须的五元组,分别为源IP、源端口、目的IP、目的端口和协议号 通信机制 基于流(stream)或者基于数据报(datagram) python 中使用 import socket socket.socket(...) UDP UDP(User Datagram Protocol) 用户数据报协议,是一种面 向无连接 的协议,提供简单不可靠的信息传输服务,发送后不会确认信息是否到达。 UDP 通信模型中,在通信开始之前,不需要建立相关的链接,只需要发送数据即可,类似于生活中"写信"。 使用 socket 使用 UDP 的收发数据,先看原理图 客户端代码实现 # 客户端 发送数据 # 1.创建udp套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) while True: send_data = input(

基于UDP的套接字

邮差的信 提交于 2020-03-05 06:25:19
listen挂的是链接请求,半链接池,不是完整的链接 from socket import * udp_server=socket(AF_INET,SOCK_DGRAM) #数据报 udp没有链接,每次发包都要指定ip端口 from socket import * ip_port=('192.168.1.6',8002) buffer_size=1024 udp_server=socket(AF_INET,SOCK_DGRAM) udp_server.bind(ip_port) while True: data,addr=udp_server.recvfrom(buffer_size) print(data) udp_server.sendto(data.upper(),addr) udp服务端 from socket import * ip_port=('192.168.1.6',8002) buffer_size=1024 udp_client=socket(AF_INET,SOCK_DGRAM) while True: msg=input('>>:') udp_client.sendto(msg.encode('utf-8'),ip_port) data=udp_client.recvfrom(buffer_size) print(data) udp客户端 来源: https

网络编程技术-----6、I/O复用实现并发服务器

牧云@^-^@ 提交于 2020-03-04 18:18:09
网络编程技术-----6、I/O复用实现并发服务器 一、实验要求 二、实验环境 三、I/O复用涉及到的函数 四、I/O复用实现流程 五、实验代码 六、运行截图 一、实验要求 服务器:     服务器等待接收客户的连接请求,一旦连接成功则显示客户地址,接着接收客户端的名称并显示;然后接收来自该客户的字符串,对接收的字符串按分组进行加密(分组长度为个人学号,密钥为个人序号,分组不够补0),再将加密后的字符发回客户端;之后继续等待接收该客户的信息,直到客户关闭连接,服务器将每个连接的用户所发来的所有数据存储起来,当连接终止后,服务器将显示客户的名字及相应的所有数据。要求服务器具有同时处理多个客户请求的能力。 客户端:     客户首先与相应的服务器建立连接;接着接收用户输入的客户端名称,并将其发送给服务器;然后继续接收用户输入的字符,再将字符串发送给服务器,同时接收服务器发回的加密后的字符串并显示。之后,继续等待用户输入字符串,指导用户输入的是quit,则关闭连接并退出。 二、实验环境 OS:kali 计算机语言:C 编译器:gcc IDE:VsCode 三、I/O复用涉及到的函数 * FD_ZERO(fd_set fdset);将指定的文件描述符集清空,在对文件描述符集合进行设置前,必须对其进行初始化,如果不清空,由于在系统分配内存空间后,通常并不作清空处理,所以结果是不可知的。 *

nodejs 实现套接字服务

风流意气都作罢 提交于 2020-03-04 09:51:19
nodejs实现套接字服务 一 什么是套接字 1.套接字允许一个进程他通过一个IP地址和端口与另一个进程通信,当你实现对运行在同一台服务器上的两个不同进程的进程间通信或访问一个完全不同的服务器上运行的服务时,套接字很有用。node提供的net模块,允许你既创建套接字服务器又创建可以连接到套接字服务器的客户端。 2.套接字位于HTTP层下面并提供服务器之间的点对点通信。套接字使用套接字地址来工作,这是IP地址和端口的组合。在套接字连接中,有两种类型的点:一类是服务器,它监听连接;一类是客户端,它打开一个到服务器的连接。服务器和客户端都需要一个唯一的IP地址和端口的组合。 3.套接字是HTTP模块的底层结构,如果你不需要处理如get何post的web请求,只需要点对点的传输数据,那么使用套接字就可以就能为你提供一个轻量级的解决方案和更多的控制。 二 net.Socket对象 1.Socket对象同时在套接字服务器和客户端套接字上创建,并允许数据在它们之间来回写入和读取。在套接字客户端,当你调用net.connect()或net.createConnection()时,Socket对象在内部创建,这个对象是为了表示到服务器的套接字连接。使用Socket对象来监控连接,将数据发送到服务器并处理来自服务器的响应。在套接字服务器上,当客户端连接到服务器时,Socket对象被创建

4-工厂模式、通信套接字

橙三吉。 提交于 2020-03-04 07:47:17
1. 工厂模式 什么是简单工厂模式? 答:使用一个单独的类来做创建势力的过程,就是工厂。比如: (1)有两个类: class RequestCodec : public Codec 和 class RespondCodec : public Codec ,两个类都继承抽象类 class Codec ; (2)若要创建两个类的对象时,需要直接调用该类的构造函数; (3)但若使用工厂模式,可以直接创建工厂类的对象,通过调用工厂类中已经实现好的成员函数,根据传参不同来创建两个类的对象; (4)通过工厂模式创建的两个类的对象是Codec类型对象,但由于多态,因此可以直接当作子类对象来使用。 简单工厂模式实现与使用? //1. 两个类继承抽象类Codec class RequestCodec : public Codec class RespondCodec : public Codec //2.创建工厂类 class BaseFactory { public : BaseFactory ( ) { } ~ BaseFactory ( ) { } //2.1通过成员函数创建两个类的对象 Codec * createCodec ( int flag ) { Codec * c = NULL ; //根据传参不同,分别创建不同的类对象 if ( flag == 1 ) /

JavaSE基础加强之网络编程(七)

你。 提交于 2020-03-03 16:26:08
概述 (一)网络通信概述 (二)TCP协议 (三)综合案例:文件上传 (一)网络通信概述 demo01: 软件结构 C/S结构 :全称为Client/Server结构,是指客户端和服务器结构。常见程序有QQ、迅雷等软件。 B/S结构 :全称为Browser/Server结构,是指浏览器和服务器结构。常见浏览器有谷歌、火狐等。 demo02: 网络通信协议: TCP/IP TCP/IP协议: 传输控制协议/因特网互联协议( Transmission Control Protocol/Internet Protocol),是Internet最基本、最广泛的协议。它定义了计算机如何连入因特网,以及数据如何在它们之间传输的标准。它的内部包含一系列的用于处理数据通信的协议,并采用了4层的分层模型,每一层都呼叫它的下一层所提供的协议来完成自己的需求。 上图中,TCP/IP协议中的四层分别是应用层、传输层、网络层和链路层,每层分别负责不同的通信功能。 链路层 :链路层是用于定义物理传输通道,通常是对某些网络连接设备的驱动协议,例如针对光纤、网线提供的驱动。 网络层 :网络层是整个TCP/IP协议的核心,它主要用于将传输的数据进行分组,将分组数据发送到目标计算机或者网络。 运输层 :主要使网络程序进行通信,在进行网络通信时,可以采用TCP协议,也可以采用UDP协议。 应用层

TCP网络通信服务器端简单示例

旧城冷巷雨未停 提交于 2020-03-03 07:30:17
服务器端: #include <stdio.h> #include <winsock2.h> //和网络通信相关的函数的声明,类型的声明,常量的定义等都在此头文件中 #pragma comment(lib,"ws2_32.lib") int main() { //第一步:初始化Socket函数库 WSADATA wsaData; //向系统请求使用2.2版本的Socket函数库,wsaData用于接收winsocket详细信息 WSAStartup(MAKEWORD(2,2),&wsaData); //第二步:创建流式套接字,相当于买部手机 //AF_INET:使用英特网地址家族,即TCP/IP协议族 //三种常用的套接字类型: //流(式)套接字:SOCK_STREAM ,用于实现基于TCP协议的通信,数据的传输采用字节流的方式传输 //数据报套接字:SOCK_DATAGRAM, 用于实现基于UDP协议的通信,数据采用数据报的方式传输 //原始套接字:SOCK_RAW, 用于实现基于IP协议的通信,较底层的通信,用的较少,一般用于实现抓包等网络嗅探功能 //0:默认协议编号, SOCKET sockListen=socket(AF_INET,SOCK_STREAM,0); if(INVALID_SOCKET == sockListen) { printf("创建监听套接字失败!