套接字

C语言学习笔记-网络与套接字

匿名 (未验证) 提交于 2019-12-03 00:15:02
所有程序都需要编写检查错误的代码 一.基础知识 客户端与服务器之间将展开一段结构化对话,叫协议。 在C语言中,如果写一个与网络通信的程序,就需要新的数据流-套接字,套接字是双向的,既可以输入也可以输出 1.使用socket()函数创建一个套接字数据流 #include <sys/socket.h> int xxxx = socket(PF_INET, SOCK_STREAM, 0); xxxx是套接字名字 套接字与客户端程序通信,服务器需要经历,绑定端口,监听,接受连接,开始通信,四个阶段 服务启动时,服务器会为每项服务分配一个端口,服务器启动时,需要告诉操作系统将要使用哪个端口,这个过程叫做端口绑定。 2.这些代码将创建一个表示"互联网xxx端口"的套接字名 #include <arpa/inet.h> struct sockeaddr_in xxxx; xxxx.sin_family = PF_INET; xxxx.sin+port = (in_port_t)htons(端口号); xxxx.sin_addr.s_addr = htonl(INADDR_ANY); int x = bind (套接字名字, (struct sockaddr * ) &xxxx, sizeof(name)); 3.设置客户端连接服务器的排队数量 listen(套接字名字, xx) xx为人数

基于tcp协议通信的套接字

匿名 (未验证) 提交于 2019-12-02 23:52:01
以打电话举例: import socket #1.买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议, #2.拨号 phone.connect(('127.0.0.1',8080)) #3.发\收消息 phone.send('hello'.encode('utf-8')) # 只能发bytes类型 data=phone.recv(1024) print('收到服务端的消息: ',data) #4.挂电话链接 phone.close() 客户端 import socket #1.买手机 phone=socket.socket(socket.AF_INET,socket.SOCK_STREAM) #SOCK_STEAM=>TCP流式协议, print(phone) #是用来接收链接请求,从而建立链接的 # 结果:<socket.socket fd=268, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0> #2.插手机卡 phone.bind(('127.0.0.1',8080)) #0-65535 #3.开机 phone.listen(5) # 同一时刻最大请求数为5个 print(

第四十九篇 socket套接字编程

匿名 (未验证) 提交于 2019-12-02 23:48:02
Ŀ¼ 数据从客户端---->服务端的协议 客户端请求连接服务端的过程需要经过三次握手 1.客户端首先会向服务端发出请求,这个请求中会带有一个SYN报头 2.服务端会接收到客户端的请求,然后响应客户端,并把SYN报头返回给客户端,而且返回的数据中会加一个ACK报头 3.客户端开始建立连接状态,并发送一条请求,这条请求带上返回的ACK报头,让服务端也进入连接状态 1.客户端首先发送带FIN报头的请求给服务端,请求断开连接 2.服务端接收到客户端的请求后,返回一个带ACK报头的确认请求,来表明同意断开 3.但由于可能会存在数据没有传输完全的情况,所以服务端还不会马上断开,它会等数据全部传输完毕之后,发送一条带上返回的FIN报头的请求给客户端 4.最后客户端收到请求后,返回带有ACK报头的数据给服务端,服务端接到数据之后,断开连接 1 # 自定义服务端 import socket # 1.定义一个符合TCP协议的服务端 server = socket.socket(socket.AF_INET, socket.SOCK_STREAM) # TCP协议 # 2.绑定IP地址 server.bind(('127.0.0.1', 8000)) # 127.0.0.1 代表本地 # 8000 端口 # server.bind(('192.168.11.196', 8000)) #

TCP/IP 的 socket 编程(三)

匿名 (未验证) 提交于 2019-12-02 23:43:01
  一、TCP/IP解析 TCP/IP协议的核心部分是传输层协议(TCP、UDP),网络层协议(IP)和物理接口层,这三层通常是在操作系统内核中实现。因此用户一般不涉及。编程时,编程界面有两种形式:   1.1、是由内核直接提供的系统调用;   1.2、使用以库函数方式提供的各种函数。   前者为核内实现,后者为核外实现。用户服务要通过核外的应用程序才能实现,所以要使用套接字(socket)来实现。 二、TCP/IP服务器及客户端操作流程 2.1服务器操作流程    此函数在应用程序中初始化 Windows Sockets DLL,只有此函数调用成功后,应用程序才可以再调用其他Windows Sockets DLL 中的 API 函数。该函数原型 int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData); 参数:    WORD wVersionRequested;  wVersionRequested = MAKEWORD(2, 0); 返回值:   a) 等于0,初始化成功;   b)不等于0, 初始化失败;   初始化 WinSockt 的动态连接库后,需要在服务器端建立一个监听的 Socket,为此可以调用 Socket()函数用来建立这个监听的 Socket,并定义此 Socket 所使用的通信协议

socket套接字编程

匿名 (未验证) 提交于 2019-12-02 22:56:40
网络基础概念 IP地址: 在IP协议中用来标识网络中不同主机的地址; IPv4:IP地址是一个4字节,32位的整数; IPv6是一个16字节,128位的整数。 端口号: 用来标识网络中唯一的一个网络服务进程,一个端口号只能被一个进程占用 一个进程可以绑定多个端口号,但是一个端口号只能被一个进程绑定 网络字节序: 发送主机通常将发送缓冲区的数据按内存地址从低到高的顺序发出; 接收主机把从网络上接受的字节依次保存在接收缓冲区中,按内存地址从低到高顺序保存; 所以,网络字节流的地址应该这样规定:先发出的数据是低地址,后发出去的数据是高地址。 TCP/IP协议规定网络数据流应采用大端字节序,即低地址高字节,不管这台主机是大端还是小端,都需要按照TCP/IP规定的网络字节序接受/发送数据。 如果当前主机是小端,需要先将数据转换成大端,否则忽略直接发送。 为提高网络程序的可移植性,使同样的C代码在大端机和小端机上编译后都能正常运行,可以调用库函数做网络字节序和主机字节序之间的转换。 #include<arpa/inet.h> uint32_t htonl(uint32_t hostlong); uint16_t htons(uint16_t hostshort); uint32_t ntohl(uint32_t netlong); uint16_t ntohs(uint16_t

网络-tcp

匿名 (未验证) 提交于 2019-12-02 22:51:30
1.TCP:面向连接可靠的传输协议 ,全拼:Transmission Control Protocol 2.UDP:用户数据报协议 全拼:User Datagram protocol 不是面向连接的 创建socket就可以直接发送数据,不能保证数据的可靠性,但是速度快 3.TCP的特点 : 3.1 面向连接, 间接验证对方地址的有效性 3.2 可靠性 3.2.1 应答机制, 对方收到数据底层会有回复 3.2.2 超时重传, 隔一段时间会给对方重新发送数据,如果对方一直没有回复那么会认为对 方掉线了。 3.2.3 错误校验, 发送方发送的数据包和接收方接收的数据包序号不一致,tcp会自动对数据 包进行排序,如果数据包重复则会删除重复的数据包。 3.2.4 流量控制, 如果对方的网卡缓冲区达到一定上限,发送方就不能再发送数据,等待数据 开始接收完成以后再给其发送数据,保证电脑不被卡死 4.TCP和UDP的不同点: 4.1 tcp是面向连接的, udp不是 4.2 tcp能保证数据的有序和准确性 udp不能保证 4.3 tcp有超时重传 udp没有 4.4 tcp有错误校验机制 udp没有 4.5 tcp舍弃重复数据包的机制 udp没有 4.6 tcp流量控制 udp没有 4.7 tcp适合做文件上传和下载 4.8 udp适合做广播 4.9 udp输出速度比tcp要快,资源开销比tcp少

网络编程-python实现-socket(1.1.1)

匿名 (未验证) 提交于 2019-12-02 22:51:30
Ŀ¼ @(网络编程) 利用 ip地址 协议 端口 标识网络的进程,网络中的进程通信就可以利用这个标志与其他进程进行交互 socket简称套接字 能实现不同主机之间的进程通信 在python中使用socke模块的函数socket就可以实现 import socket s = socket.socket(AddressFamily,Type) 说明 AddressFamily:(AF_INET,AFUNIX)前者为internet进程间通信,后者为同一台机器进程通信,通常使用前者 Type:套接字类型,SOCK_STREAM为TCP协议,SOCK_DGRAM为UDP协议 创建一个TCP套接字 import socket #创建tcp的套接字 s = socket.socket(socket.AF_INET,socket.SOCK_STREAM) # ... 这里是使用套接字的功能,省略 ... #不用的时候关闭套接字 s.close() 创建一个UDP套接字 import socket #创建tcp的套接字 s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM) # ... 这里是使用套接字的功能,省略 ... #不用的时候关闭套接字 s.close() 说明 套接字使用的流程与文件使用的流程很类似 创建套接字 使用套接字收发数据

python的socket模块

匿名 (未验证) 提交于 2019-12-02 22:51:30
sk.bind(address)   s.bind(address) 将套接字绑定到地址。address地址的格式取决于地址族。在AF_INET下,以元组(host,port)的形式表示地址。 sk.listen(backlog)   开始监听传入连接。backlog指定在拒绝连接之前,可以挂起的最大连接数量。 sk.setblocking(bool)   是否阻塞(默认True),如果设置False,那么accept和recv时一旦无数据,则报错。 sk.accept()   接受连接并返回(conn,address),其中conn是新的套接字对象,可以用来接收和发送数据。address是连接客户端的地址。   接收TCP 客户的连接(阻塞式)等待连接的到来 sk.connect(address)   连接到address处的套接字。一般,address的格式为元组(hostname,port),如果连接出错,返回socket.error错误。 sk.connect_ex(address)   同上,只不过会有返回值,连接成功时返回 0 ,连接失败时候返回编码,例如:10061 sk.close()   关闭套接字 sk.recv(bufsize[,flag])   接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息

socket模块__python

匿名 (未验证) 提交于 2019-12-02 22:11:45
套接字: AF_INET 传输控制协议(即 TCP)指定套接字类型为 SOCK_STREAM 数据报协议(即 UDP)指定套接字类型为 SOCK_DGRAM (来自单词datagram“数据报”) socket(socket_family, socket_type, protocol=0) socket_family 可以是 AF_UNIX 或 AF_INET。socket_type 可以是 SOCK_STREAM 或 SOCK_DGRAM。 套接字内建方法 函数 描述 服务器端套接字函数 s.bind() 绑定地址(主机,端口号对)到套接字 s.listen() 开始 TCP 监听 s.accept() 被动接受 TCP 客户的连接,(阻塞式)等待连接的到来 客户端套接字函数 s.connect() 主动初始化 TCP 服务器连接 s.connect_ex() connect()函数的扩展版本,出错时返回出错码,而不是抛异常 公共用途的套接字函数 s.recv() 接收 TCP 数据 s.send() 发送 TCP 数据 s.sendall() 完整发送 TCP 数据 s.recvfrom() 接收 UDP 数据 s.sendto() 发送 UDP 数据 s.getpeername() 连接到当前套接字的远端的地址 s.getsockname() 当前套接字的地址 s

【1】HTTP协议和Socket接口区别

匿名 (未验证) 提交于 2019-12-02 22:11:45
内容提要:     1.网络七层模型     2.什么是HTTP协议     3.什么是Socket接口 1.网络七层模型 第一层:物理层 为设备之间的信息提供传输提供可靠环境,那么这个环境是什么呢? 如:同轴电缆,插头,接收器,水晶头,网线等。可以在通信的两个数据终端的设备之间连接起来形成一条通路。 再说下这个协议中的某一项规定:比如eiars-232-c及rs-449就可以兼容于100序列线上。 第二层:数据链路层 提供数据的传送服务。 这里涉及到一个信息就是帧,它是数据传输的单元,不同的协议帧的长短也不同。它还有差错恢复,流量控制的功能(这个指的是硬件) 我们常见的链路层产品就是网卡,网桥等。 它的作用是 路由的选择,网络的激活和终止。 它还有的一个重要功能就是在一条数据链路上复用多条网络连接,大多采用的是分时复用的技术。 我们常见的是路由器、网关等 第四层:传输层 它是 两台计算机经过网络进行数据通信时最基础的端到端的一个层次 。它的服务满足了传送质量,传达速度,传送费用的不同需要。它还具有差错恢复,流量控制的功能(这个指的是软件) 很多时候我们会发现QQ聊天的速度很快,但是我们上网速度就很慢,这就是因为QQ使用UDP协议,没有纠错功能,而网络的传输使用的是TCP协议,它的纠错功能就会导致传输速度变慢。 第五层:会话层 它的服务可 使应用建立和维持会话 。再举个栗子