socket

UDP中的sendto 与recvfrom

醉酒当歌 提交于 2020-03-23 05:59:38
sendto 头文件 : #include <sys/types.h> #include <sys/socket.h> 定义函数 : int sendto(int s, const void * msg, int len, unsigned int flags, const struct sockaddr * to, int tolen); 参数说明 : s:一个标识套接口的描述字。 buf:包含待发送数据的缓冲区。 len:buf缓冲区中数据的长度。 flags:调用方式标志位。 to:(可选)指针,指向目的套接口的地址。 tolen:to所指地址的长度。 函数说明 : sendto() 用来将数据由指定的socket 传给对方主机. 参数s 为已建好连线的socket, 如果利用UDP协议则不需经过连线操作. 参数msg 指向欲连线的数据内容, 参数flags 一般设0, 详细描述请参考send(). 参数to 用来指定欲传送的网络地址, 结构sockaddr 请参考bind(). 参数tolen 为sockaddr 的结果长度. 返回值 : 成功则返回实际传送出去的字符数, 失败返回-1, 错误原因存于errno 中. 错误代码 : 1、EBADF 参数s 非法的socket 处理代码. 2、EFAULT 参数中有一指针指向无法存取的内存空间. 3、WNOTSOCK

网络编程(2)

风流意气都作罢 提交于 2020-03-22 18:26:38
文件传输 基础文件传输(小文件) # server端负责接收 import socket import json sk = socket.socket() sk.bind(('127.0.0.1', 5002)) sk.listen() conn, addr = sk.accept() msg_f = conn.recv(1024).decode('UTF-8')# 接收client端的文件信息 dic_f = json.loads(msg_f)# json.loads()用于将字符串形式的数据转化为字典 with open(dic_f['filename'], mode='wb') as f: file = conn.recv(dic_f['filesize'])# 以发送过来的文件大小接收文件 f.write(file) conn.close() sk.close() ############################################## # client端负责发送 import socket import os import json sk = socket.socket() sk.connect(('127.0.0.1', 5002)) abs_path = r'D:\1.jpg' filename = os.path.basename(abs

Linux五大网络IO模型

爷,独闯天下 提交于 2020-03-22 18:25:08
对于一个应用程序即一个操作系统进程来说,它既有内核空间(与其他进程共享),也有用户空间(进程私有),它们都是处于虚拟地址空间中。 用户进程是无法访问内核空间的,它只能访问用户空间,通过用户空间去内核空间复制数据,然后进行处理 。 1、阻塞io(同步io):   发起请求就一直等待,直到数据返回。好比你去商场试衣间,里面有人,那你就一直在门外等着。(全程阻塞)    2、非阻塞io(同步io):    不管有没有数据都返回,没有就隔一段时间再来请求,如此循环。好比你要喝水,水还没烧开,你就隔段时间去看一下饮水机,直到水烧开为止。 (复制数据时阻塞)      当用户进程发出read操作时,如果kernel(内核空间)中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。从用户进程角度讲 ,它发起一个read操作后,并不需要等待,而是马上就得到了一个结果。用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作。一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到了用户内存( 此时占用CPU阻塞 ),然后返回。 3、 多路复用 io(同步io):     I/O是指网络I/O, 多路指多个TCP连接(即socket或者channel),复用指复用一个或几个线程

Python socket 通信功能简介

此生再无相见时 提交于 2020-03-22 15:10:10
常用的地址家族 AF_UNIX:基于文件,实现同一主机不同进程之间的通信 AF_INET:基于网络,适用于IPv4 AF_INET6:基于网络,使用于IPv6 常见的连接类型 SOCK_STREAM:即TCP/IP。面向连接的套接字,通信之前必须建立可靠的连接。面向连接的套接字提供序列化的、可靠的和不重复的数据交付,而没有记录边界。 SOCK_DGRAM:即UDP。面向非连接的套接字,通信之前无需建立连接。在数据传输过程中无法保证数据的有序性、可靠性和重复性。然而数据报确实保存了记录边界,意味着数据是以整体发送的,而非事先切割多个片段。 socket通信 server端 import socket server = socket.socket() # 默认是AF_INET、SOCK_STREAM server.bind(("localhost",6868)) # 将主机号与端口绑定到套接字 server.listen() # 设置并启动TCP监听器 while True: conn,addr = server.accept() # 被动接受TCP连接,一直等待连接到达 while True: data = conn.recv(1024) # 接收TCP消息,并制定最大长度 if not data: print("连接已断开") break conn.send(data.upper(

linux c++ socket

牧云@^-^@ 提交于 2020-03-22 09:44:19
一.TCP Server: 1.创建套接字socket():socket本质上就是一个int的数字,文件描述符,用于标识主机间端到端的通讯。两端的主机,通过对该socket进行读写,完成双方的通讯。 2.绑定 bind():是将已经新建好的套接字(即:socket)与本地的地址进行一个联系(即:将socket绑定到一个本地地址和端口上)。 3.将套接字设定为监听模式,准备接受客户端请求listen(): 监听是告诉客户端,服务器这边已经准备好了,等待为其服务啦。 4.接收连接 accept():等待客户端请求到来,当请求到来后,接受连接请求,返回一个新的对应于此连接的套接字. 5.读写 read()/write() : 关于读写的函数比较多,read()\write(), recv()\send()、recvfrom\sendto(),recvmsg()\sendmsg()等。几组函数间比较相似,个别又有特点. 6.返回,等待另一个客户端请求. 7.关闭套接字. 二.TCP Client: 1.新建 socket() 2.连接 connect() 三.sockaddr_in 数据结构 使用数据结构sockaddr_in存储IP和端口等参数 sockaddr_in(在netinet/in.h中定义): 1 2 3 4 5 6 7 8 9 10 11 12 13 struct

TCP通信

♀尐吖头ヾ 提交于 2020-03-22 08:00:49
1、TCP概述 TCP(Transmission Control Protocol):传输控制协议,是一种面向连接的协议。 TCP不同于UDP,TCP严格区分客户端和服务器端,在通信时,必须先由客户端去连接服务器端才能实现通信,服务器端不可以去主动连接客服端,并且服务器端程序需要事先启动,等待客户端的连接。 在jdk中提供了两个类用于实现TCP程序,一个是ServerSocket类,用于表示服务器端,一个Socket类,用于表示客户端。 通信时,首先创建代表服务器端的ServerSocket对象,该对象相当于开启一个服务,并等待客户端的连接,然后创建代表客户端的Socket对象向服务器发送连接请求,服务器端相应请求,两者建立开始通信。 2、ServerSocket ServerSocket类的构造方法: ServerSocket(int port):创建绑定到特定端口的服务器套接字。 常用方法: Socket accept():侦听并接受到此套接字的连接。 InetAddress getInetAddress():返回此服务器套接字的本地地址。 3、Socket Socket类构造方法: Socket(String host, int port):创建一个流套接字并将其连接到指定主机上的指定端口号。 Socket(InetAddress address, int port)

c# socket udp广播

时光毁灭记忆、已成空白 提交于 2020-03-22 05:46:18
一、广播消息   由于Tcp是有连接的,所以不能用来发送广播消息。发送广播消息,必须用到Udp,Udp可以不用建立连接而发送消息。广播消息的目的IP地址是一种特殊IP地址,称为广播地址。广播地址由IP地址网络前缀加上全1主机后缀组成,如:192.168.1.255是192.169.1.0这个网络的广播地址;130.168.255.255是130.168.0.0这个网络的广播地址。向全部为1的IP地址(255.255.255.255)发送消息的话,那么理论上全世界所有的联网的计算机都能收得到了。但实际上不是这样的,一般路由器上设置抛弃这样的包,只在本地网内广播,所以效果和向本地网的广播地址发送消息是一样的。   利用udp广播可以实现像cs中建立服务器后,客户端可以收到服务器消息从而进行连接。 二、服务端 开启线程不断广播自己ip地址等信息,等待客户端接收 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Net; 6 using System.Net.Sockets; 7 using System.Threading; 8 using System.Threading.Tasks; 9 10 namespace

Java学习之Socket编程

做~自己de王妃 提交于 2020-03-22 05:00:50
什么是Socket Java中的Socket编程其实就是网络编程,一般使用基于TCP/IP协议的Socket编程。所有关于Socket编程的API都在Java.net包里,一般实现客户端和服务器端之间的通讯。 Socket通讯的过程 Server端Listen(监听)某个端口是否有连接请求,Client端向Server 端发出Connect(连接)请求,Server端向Client端发回Accept(接受)消息。一个连接就建立起来了。Server端和Client 端都可以通过Send,Write等方法与对方通信。 对于一个功能齐全的Socket,都要包含以下基本结构,其工作过程包含以下四个基本的步骤: 创建Socket; 打开连接到Socket的输入/出流; 按照一定的协议对Socket进行读/写操作; 关闭Socket。 socket编程要求 服务器的位置必须得是固定的, 1 ServerSocket server=new ServerSocket(6789); 注:端口号的分配必须是唯一的,因为端口是为了唯一标识每台计算机唯一服务的。另外端口号是从0到65535之间的,前1024个端口已经被TCP/IP作为保留端口,因此你所分配的端口只能是1024个之后的。 1 Socket socket = server.accept(); 注:accept方法是一个阻塞方法

基本Socket通信流程

亡梦爱人 提交于 2020-03-22 05:00:27
服务器常用模型 1.初始化Socket (用于监听) 1)初始化 SOCKET s ; s = Socket ( ... ) 2)绑定 bind(s, ...); 3)监听 listen(s, ...); 2.建立连接 1)检查状态 int ret = select ( ... ) ; if ( ret > 0 ) { //新连接 } 2)建立新连接 (如果有客户端请求连接) temp = accept ( ... ); // 注意,此时并不使用原来的Socket,而是新建一个Socket (temp)来跟客户端通信 3.收发数据 1)检测读入数据 int ret = select ( ... ) if ( ret > 0 ) { // 有新数据 } 2)接收数据 ret = recv ( ...); 3)检查发送数据 int ret = select ( ... ) ; 4)发送数据 ret = send ( ... ); 客户端常用模型 1.初始化 1)创建Socket s = Socket ( ... ) 2)绑定端口 bind(s , ... ) ; // 客户端的IP地址和端口都不需要固定,可由系统自动分配。因此可以不使用bind绑定端口与协议。 2.建立连接 connect( ... ) 3.收发数据 同服务端 4.关闭连接 来自为知笔记(Wiz) 来源: https:

Android网络通信之Socket

微笑、不失礼 提交于 2020-03-22 04:59:09
在移动APP开发中。网络通信数据传输是必定存在的。移动APP离开了网络通信数据传输的功能方式,就好比一潭死水,永远都 是原来的样子。 提到网络通信传输数据。首先出如今程序猿脑海中的是HTTP协议传输,然而要深沉次的挖掘HTTP协议的传输原理, 那么久会有一个Socket的长连接数据传输的方式。HTTP协议数据传输,分为Get、POST两种请求方式,而Socket长连接也有两种方 式,一种是TCP协议的传输方式,还有一种是UDP协议的传输方式。在此。我觉得Socket的理解例如以下: 一、 Socket定义: Socket 是应用层与 TCP/IP 协议族通信的中间软件抽象层。它是一组接口。在设计模式中, Socket 事实上就是一个门面模式, 它把复杂的 TCP/IP 协议族隐藏在 Socket 接口后面。对用户来说,一组简单的接口就是所有,让 Socket 去组织数据,以符合指定 的协议。 二、基于TCP/IP协议的Socekt 1、 使用 Socket 实现client的步骤; 1 、通过 IP 地址和port实例化 Socket, 请求连接server 2 、获取 Socket 上的流以进行读写 3 、把流包装进 BufferReader/PrintWriter 的实例 4 、对 Socket 进行读写 5 、关闭打开的流 创建server的步骤: 1