套接字

[计算机网络]套接字编程

余生长醉 提交于 2019-12-05 03:55:50
/// 服务器 配置电话机 #include <sys/socket.h>int socket(int domain, int type, int protocol); 调用 socket 函数创建套接字 大厂分机配置好人员 #include <sys/socket.h>int bind(int sockfd, struct sockaddr *myaddr,socklen_t addrlen);// 成功时返回 0 失败时返回 -1 调用 bind 函数分配 IP 和端口号 听到电话响 #include <sys/socket.h>int listen(int sockfd, int backlog);// 成功时返回 0 ,失败时返回 -1 调用 listen 函数转为可接收请求状态 接电话 #include <sys/socket.h>int accept(int sockfd, struct sockaddr *addr, socklen_t *addrlen);// 成功时返回文件描述符,失败时返回 -1 调用 accept 函数受理连接请求 // 客户端 配置电话机 拨打电话 #include <sys/socket.h>int connect ( int sockfd, struct sockaddr *serv_addr, socklen_t addrlen ) ;

Golang 系统调用Syscall

邮差的信 提交于 2019-12-05 00:33:33
最近在研究go语言,发现go语言系统调用源码只有调用函数的定义,没有指导文档,网上也没有相关文档的说明,自己稍微研究了一下,不对的地方欢迎指教 go源码中关于系统调用的定义如下: func Syscall(trap, a1, a2, a3 uintptr ) (r1, r2 uintptr , err Errno) func Syscall6(trap, a1, a2, a3, a4, a5, a6 uintptr ) (r1, r2 uintptr , err Errno) func RawSyscall(trap, a1, a2, a3 uintptr ) (r1, r2 uintptr , err Errno) func RawSyscall6(trap, a1, a2, a3, a4, a5, a6 uintptr ) (r1, r2 uintptr , err Errno) 其中Syscall和RawSyscall区别在于Syscall开始和结束,分别调用了 runtime 中的进入系统调用和退出系统调用的函数,说明Syscall函数受调度器控制,不会造成系统堵塞,而RawSyscall函数没有调用runtime,因此可能会造成堵塞,一般我们使用Syscall就可以了,RawSyscall最好用在不会堵塞的情况下。 func Syscall(trap, a1, a2,

io操作-套接字函数/数据打包

帅比萌擦擦* 提交于 2019-12-04 23:41:17
函数 【1】 sockfd.type 套接字类型 【2】 sockfd.family 套接字地址类型 【3】 sockfd.getsockname() 获取套接字绑定地址 【4】 sockfd.fileno() 获取套接字的文件描述符 【5】 confd.getpeername() 获取连接套接字客户端地址 ## struct模块进行数据打包 struct模块作用:将一组 简单数据 进行打包,转换为bytes格式发送。或者将一组bytes格式数据,进行解析 复杂数据:可以用json模块或者str()/eval()配合使用 import json #把字典转换成字符串 dict1={'a':1,"b":[1,2]} a=json.dumps(dict1) b=json.loads(a) print(b)#<class 'dict'> {'a': 1, 'b': [1, 2]} 把所有语言转为c语言类型: i 整型 f 浮点型 s 字节(必须字节才能打包,不是字节先转换) import struct t = struct.Struct('4sif') a = t.pack('chen'.encode(), 40, 1.25) b = t.unpack(a) print(b) #(b'chen', 40, 1.25) 或者 import struct a = struct.pack(

套接字

蹲街弑〆低调 提交于 2019-12-04 20:51:50
套接字 一、定义 int socket(int af,int type,int protocol); 解析:af:地址家族,一般使用AF_INET,代表的是IPv4    type:套接字的数据处理类型,主要使用两种,SOCK_DGRAM和SOCK_STREAM,分别是UDP和TCP。    protocol:根据第一参数和第二个参数确定,确定支持哪种协议,一般设置为0。 二、关闭 int close(int d); 一般关闭使用close函数,关闭指定ID的套接字。 int shutdown(int socket,int direction); 解析:socket:套接字ID,    direction:可以设置为0,1,2,分别对应着SHUT_RD,SHUT_WR,SHUT_RDWR。 三、有关套接字的结构体 struct sockaddr{   u_short sa_family; //Internet的地址家族   char sa_data[14]; } 解析:sockaddr:由两个字节的地址家族和包含IP地址和端口号的14个字节的地址构成。 struct in_addr{   u_long s_addr; } struct sockaddr_in{   short   sin_family;   u_short sin_port;   struct  in_addr

tcp和udp的socket形式

浪子不回头ぞ 提交于 2019-12-04 20:26:55
Sockets编程有三种: (1).流套接字( SOCK_STREAM); (2).数据包套接字( SOCK_DGRAM); (3).原始套接字( SOCK_RAW); TCP是流套接字 UCP是数据包套接字 来源: https://www.cnblogs.com/132818Creator/p/11881620.html

SOCKET 通信

淺唱寂寞╮ 提交于 2019-12-04 18:43:08
TCP 服务端 #include<iostream> #include<winsock.h> #pragma comment(lib,"ws2_32.lib") using namespace std; void initialization() { //初始化套接字库 WORD w_req = MAKEWORD(2, 2);//版本号 WSADATA wsadata; /*WSAStartup()程序使用的socket版本、操作系统但会的支持的socket版本,成功时返回0*/ int err = WSAStartup(w_req, &wsadata); if (err != 0) { cout << "初始化套接字库失败!" << endl; } else { cout << "初始化套接字库成功!" << endl; } //检测版本号 if (LOBYTE(wsadata.wVersion) != 2 || HIBYTE(wsadata.wHighVersion) != 2) { cout << "套接字库版本号不符!" << endl; WSACleanup(); } else { cout << "套接字库版本正确!" << endl; } } int main() { //定义长度变量 int send_len = 0, recv_len = 0; int len =

python中的网络通信,socket、select、selectors、socketserver

不羁岁月 提交于 2019-12-04 18:31:23
楔子 网络通信用于获取一个算法在本地运行所需的数据,还可以共享信息实现分布式处理,另外可以用来管理云服务。 python的标准库提供了一些模块来创建网络服务以及访问现有服务ipaddress模块提供了一些类来验证、比较和处理IPV4/IPV6网络地址。底层socket库允许直接访问原生C套接字库,可以用于与任何网络服务通信。selectors提供了一个高层接口,可以同时监视多个套接字,这对于支持网络服务器同时与多个客户通信很有用。select提供了selectors使用的底层API。socketserver中的框架抽象了创建一个新的网络服务器所需要的大量重复性工作。可以结合这些类创建服务器来建立或使用线程以及支持TCP或UDP。应用只需要完成实际的消息处理 ipaddress:Internet地址 介绍 ipaddress模块提供了处理IPV4和IPV6网络地址的类。这些类支持验证,查找网络上的地址和主机,以及其他常见操作 地址 import binascii import ipaddress ''' 最基本的对象表示网络地址本身。可以像ip_address函数传入一个字符串,整数或者字节序列来构造一个地址。 返回值是一个IPv4Address或IPv6Address实例,这取决于使用什么类型的地址 ''' address = "61.135.169.125" addr =

网络编程-1

爱⌒轻易说出口 提交于 2019-12-04 18:20:35
1、 套接字 套接字是一种具有之前所说的“通讯端点”概念的计算机网络数据结构,网络化的应用程序在开始任何通讯之前都必需要创建套接字。就像电话的插口一样,没有它就完全没办法通讯。 2、 面向连接和无连接 套接字的类型有两种。一种是面向连接的套接字,另一种是无连接的套接字。 面向连接:在通讯之前需要建立一条连接,面向连接的通讯方式提供了顺序的、可靠的、不会重复的数据传输,每条数据都会不多不少地到达目的地。通过TCP协议实现。 无连接:和面向连接正好相反,通讯之前不需要建立连接,但无法保证供顺序的、可靠的、不会重复的数据传输。通过UDP协议实现 3、 SOCKET 模块 主要使用socket模板中的socket.socket()函数来实现套接字,语法如下: family可以是AF_UNIX或AF_INET,socket_type 可以是 SOCK_STREAM(TCP)或 SOCK_DGRAM(UDP)。protocol 一般不填,默认值为 0。 4. 套接字中的方法 socket.socket() 函数 描述 服务器端套接字函数 s.bind() 绑定地址(主机,端口号对)到套接字 s.listen() 开始 TCP 监听 s.accept() 被动接受 TCP 客户的连接, (阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化 TCP 服务器连接 s

Qt---tcp之网络通信

感情迁移 提交于 2019-12-04 18:04:36
----------------------------------------------------------------------------------------------- Tcp的网络连接的过程: 首先对于服务器: 1、服务器有两个套接字:监听套接字、通信套接字(对于某些语言来说可能还要开启套接字服务才能创建套接字) 2、监听套接字分为:创建套接字、bind绑定ip和端口、listen监听外来连接(在bind绑定的之前还要进行连接地址的设置) 3、之后就是通信套接字:accept建立连接 4、建立连接之后就开始进行,write,read发送和读取信息 再来看看客户端的: 1、同样的创建套接字 2、发送connect连接请求(在发送connect之前还要设置要连接的服务器的地址信息) 3、请求成功之后再进行write、read发送和读取信息 Qt==network 在qt中有个监听 QT的槽函数,都是指针类型Lambda表达式 ---------》[=](){};=表示值传递,外部所有的局部变量,和类中的成员变量,值不可以被修改 ---------》[&](){};=表示引用传递,外部所有的局部变量,值可以被修改,引用如果被销毁,则引用会报错 ---------》一般用[=](){} QT中有一个对象树:从QObject这个根开始一直往下走

python基础(29):网络编程一(软件开发架构、网络基础、套接字初使用)

假如想象 提交于 2019-12-04 15:37:18
1. 软件开发架构 我们了解的程序之间通讯的应用可分为两种: 第一种是应用类:qq、微信、百度网盘、腾讯视频这一类是属于需要安装的桌面应用。 第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用。 这些应用的本质其实都是两个程序之间的通讯,而这两个分类又对应了两个软件开发的架构。 1.1 C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。 这里的客户端一般泛指客户端应用程序EXE,程序需要先安装后,才能运行在用户的电脑上,对用户的电脑操作系统环境依赖较大。 1.2 B/S架构 B/S即:Browser与Server,中文意思:浏览器端与服务器端架构,这种架构是从用户层面来划分的。 Browser浏览器,其实也是一种Client客户端,只是这个客户端不需要大家去安装什么应用程序,只需在浏览器上通过HTTP请求服务器端相关的资源(网页资源),客户端Browser浏览器就能进行增删改查。 2. 网络基础 2.1 OSI七层模型 须知一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的)。 如果你要跟别人一起玩,那你就需要上网了,什么是互联网? 互联网的核心就是由一堆协议组成,协议就是标准