套接字

Socker编程之UDP

孤人 提交于 2019-11-26 10:33:41
一:socket简介 1. 不同电脑上的进程之间如何通信 首要解决的问题是如何唯一标识一个进程,否则通信无从谈起! 在1台电脑上可以通过进程号(PID)来唯一标识一个进程,但是在网络中这是行不通的。 其实TCP/IP协议族已经帮我们解决了这个问题,网络层的“ip地址”可以唯一标识网络中的主机,而传输层的“协议+端口”可以唯一标识主机中的应用进程(进程)。 这样利用 ip地址,协议,端口就可以标识网络的进程了,网络中的进程通信就可以利用这个标志与其它进程进行交互。 注意:  所谓 进程 指的是:运行的程序以及运行时用到的资源这个整体称之为进程 所谓 进程间通信 指的是:运行的程序之间的数据共享 2. 什么是socket socket(简称 套接字 ) 是进程间通信的一种方式,它与其他进程间通信的一个主要不同是: 它能实现不同主机间的进程间通信,我们网络上各种各样的服务大多都是基于 Socket 来完成通信的 例如我们每天浏览网页、QQ 聊天、收发 email 等等 3. 创建socket 在 Python 中 使用socket 模块的函数 socket 就可以完成: import socket socket.socket(AddressFamily, Type) 说明: 函数 socket.socket 创建一个 socket,该函数带有两个参数: Address Family

网络编程 之 套接字

ぃ、小莉子 提交于 2019-11-26 10:24:19
本地回环地址 127.0.0.1 只能自己识别自己,其他人无法访问 TCP特点 将数据量较小的并且时间间隔比较短的数据,一次性打包发给对方 一个简单的CS架构 # server端口 ​ import socket # 导入socket模块 server = socket.socket() # 生成一个对象 server.bind(('127.0.0.1', 8080)) # 把地址绑定到套接字​​​​ conn, sddr = server.accept() # 接收客户端链接 ret = conn.recv(1024) # 接收客户端信息 print(ret) # 打印客户端信息​​ ​​conn.send(b'hi') # 向客户端发送信息 conn.close() # 关闭客户端套接字 server.close() # 关闭服务器套接字(可选)​​ ​ # client端 ​​​​import socket # 导入socket模块 client = socket.socket() # 创建客户端套接字 client.connect(('127.0.0.1', 8808)) # 连接服务器 slient.send(b'hello!')​​​ # 向客户端发送信息 ret = client.recv(1024)​ # 接口服务端信息 prient(ret) #

套接字,粘包问题解决

感情迁移 提交于 2019-11-26 10:18:32
socket(套接字) 本地回环地址 127.0.0.1 我们先来写一个简单地服务器和客户端 服务端 import socket ​ server = socket.socket() # 就比如买了一个手机 server.bind(("127.0.0.1",8080)) # bind中绑定的是IP地址和端口号,注意是一个元组,就比如,将手机卡,插入了手机 server.listen(5) # 半连接池,最大等待连接数为5个,就比如开机 conn,address = server.accept() # 接听电话等着别人给你打电话 ​ date = conn.recv(1024) # 听别人说话,接收1023个字节数 print(date) conn.send(b"hello") # 给别人回话 ​ ​ conn.close() # 挂断电话 server.close() # 关机 客户端 import socket ​ client = socket.socket() #拿电话 client.connect(("127.0.0.1",8080)) #绑定的是IP地址和端口号,也是一个元组 拨号 ​ client.send(b"hello") # 对别人发消息 ​ date = client.recv(1024) #接收别人说话,没次接收1024个字节 print(date) ​

网络编程-套接字(socket)

情到浓时终转凉″ 提交于 2019-11-26 10:18:07
一、Socket(套接字) ★注意点: ① 127.0.0.1本机地址回环:只能识别自己,其他人无法访问 ② send与recv对应,不要出现两边是相同的情况,recv是跟内存要数据,无需考虑 ③ tcp特点是会将数据量比较小的并且时间间隔比较短的数据,一次性打包发送给对方 1 import socket 2 3 server = socket.socket() # 买手机 不传参数默认用的就是TCP协议 4 server.bind(('127.0.0.1',8080)) # bind((host,port)) 插电话卡 绑定ip和端口 5 server.listen(5) # 开机 半连接池 6 7 conn, addr = server.accept() # 接听电话 等着别人给你打电话 8 data = conn.recv(1024) # 听别人说话 接收1024个字节数据 9 conn.send(b'hello baby~') # 给别人回话 10 11 conn.close() # 挂电话 12 server.close() # 关机 Server端代码 1 import socket 2 3 client = socket.socket() # 拿电话 4 client.connect(('127.0.0.1',8080)) # 拨号 写的是对方的ip和port 5 6

网络编程

匆匆过客 提交于 2019-11-26 09:27:26
网络编程 1.0 引子 假如有两个脚本, foo.py ,, bar.py ,分别运行,都可以正常运行。但是现在想从两个程序之间传递一个数据 同一台电脑 创建一个文件。将foo.py的数据读入文件中,bar.py从文件中读取数据。 不同电脑间 2.0 软件的开发架构 2.1 c/s架构 c/s 即Client和Server ---->客户端和服务器端架构 2.2 B/s架构 B/S 即Browser和Server---->浏览器端和服务器端架构 3.0 什么是网络 网络就是一种辅助双方或者多方能够连接在一起的工具。 伴随着网络发展,人们使用了很多通信方法,有些已不再使用,现在使用最广泛的是------ TCP/IP 协议 (Transmission Control Protocol/Internet Protocol) TCP/IP是标准协议,它可以使世界范围内的计算机通过Internet或本地网络通信。 TCP/IP事实上是一些协议(protocols)的合集。当前大多数使用中的通信都使用TCP协议。 Internet是在一些共享的线路上发送数据的。例如:在您的计算机上也许同时运行着几个应用程序,如Web浏览器、通讯软件等程序,而您只须通过一条单一的线路来连接互联网。上面所有的程序都共享这个连接,简单地说,用户往往不会觉察到这个共享的发生。 3.1 目的 使用网络把多方连在一起

IPC-本地套接字

邮差的信 提交于 2019-11-26 02:04:43
一。Unix domain socket概念   socket API原本是为网络通讯设计的,但后来在socket的框架上发展出一种IPC机制,就是UNIX Domain Socket。虽然网络socket也可用于同一台主机的进程间通讯(通过loopback地址127.0.0.1),但是UNIX Domain Socket用于IPC更有效率:不需要经过网络协议栈,不需要打包拆包、计算校验和、维护序号和应答等,只是将应用层数据从一个进程拷贝到另一个进程。这是因为,IPC机制本质上是可靠的通讯,而网络协议是为不可靠的通讯设计的。   UNIX Domain Socket是全双工的,API接口语义丰富,相比其它IPC机制有明显的优越性,目前已成为使用最广泛的IPC机制,比如X Window服务器和GUI程序之间就是通过UNIXDomain Socket通讯的。 二。本地套接字地址结构 struct sockaddr_un { __kernel_sa_family_t sun_family ; /* AF_UNIX */ 地址结构类型 char sun_path [UNIX_PATH_MAX]; /* pathname */ socket文件名(含路径) }; 三。代码示例 服务端 1 #include <stdio.h> 2 #include <unistd.h> 3 #include

socket

别说谁变了你拦得住时间么 提交于 2019-11-26 01:40:39
socket recv 和 recvfrom udp编程中 socket接受数据用recvfrom tcp中用recv udp 接受端口时recvfrom tcp用accept sk.recv(bufsize[,flag]) 接受套接字的数据。数据以字符串形式返回,bufsize指定最多可以接收的数量。flag提供有关消息的其他信息,通常可以忽略。 sk.recvfrom(bufsize[.flag])  与recv()类似,但返回值是(data,address)。其中data是包含接收数据的字符串,address是发送数据的套接字地址。 socket参数的详解 socket.socket(family=AF_INET,type=SOCK_STREAM,proto=0,fileno=None) 创建socket对象的参数说明: family 地址系列应为AF_INET(默认值),AF_INET6,AF_UNIX,AF_CAN或AF_RDS。 (AF_UNIX 域实际上是使用本地 socket 文件来通信) type 套接字类型应为SOCK_STREAM(默认值),SOCK_DGRAM,SOCK_RAW或其他SOCK_常量之一。 SOCK_STREAM 是基于TCP的,有保障的(即能保证数据正确传送到对方)面向连接的SOCKET,多用于资料传送。 SOCK_DGRAM 是基于UDP的

Linux测试TCP通信

最后都变了- 提交于 2019-11-25 22:25:38
传输控制协议(TCP,Transmission Control Protocol)是为了在不可靠的互联网络上提供可靠的端到端字节流而专门设计的一个传输协议。 百度百科 在TCP/IP中,TCP和UDP是最主要的传输层协议,也是应用希望进行网络通信时直接接触的协议。现在就来尝试一下在Linux上实现TCP-Server和TCP-Client的双向通信。 系统环境:Ubuntu 18.04/vim/g++/make 本文假设读者有一定C基础,基本了解TCP协议。 要先实现在Linux的C程序运行,首先要在Linux系统上安装C编译环境,这里使用vim编写,g++编译,makefile构建。 TCP/IP协议是现代网络通信的核心协议,在网络通信时,由于各种各样的原因,如交换设备掉电、网络堵塞、主机宕机等,都可能造成数据传输的失败。这时候保证数据能够完整的到达目的地就尤为重要。这时候就需要TCP协议的握手机制来实现可靠的通信。 所谓握手机制就是在正式开始数据传输之前进行一些传输参数的协商,建立连接后再传送数据就可以对每一组数据进行确认,以保证可靠传输。 TCP协议提供了端口号的概念,每台主机共有65536个端口分别编号0~65535,。每个端口对应一个进程,如最常见的80代表HTTP连接,21代表FTP服务,22代表SSH服务,3389 代表Windows远程登录等等