socket

python socket和client

感情迁移 提交于 2020-02-21 17:49:28
node1:/root/test#cat t2.py # coding = utf-8 # -*- coding:utf-8 -*- import socket ip_port = ('192.168.137.2',8080) BUFSIZE = 10 s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)#创建套接字 s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) s.bind(ip_port)#绑定地址 s.listen(5)#监听链接 print('server listening8080...') while True: #无限等待连接 conn,addr = s.accept() #接受客户端连接 print(conn) print(addr) print('接到来自%s的链接'%addr[0]) while True: #通信循环,无限接受客户端信息 #print conn.getpeername() try: peeraddr=conn.getpeername() msg = conn.recv(BUFSIZE) #接受消息的内容 except: break; if len(msg)==0:break #如果 不加,已连接的客户端突然断开

Python学习之socket实现ssh

微笑、不失礼 提交于 2020-02-21 17:24:52
服务器端步骤 # family address # AF.INET ipv4 # AF.INET6 ipv6 # AF.UNIX local # socket protocol # socket.SOCK_STREAM tcp # socket.SOCK_DGRAM udp # 声明socket实例,包括地址簇,协议类型,默认是ipv4,tcp server = socket.socket() #绑定要监听的端口 server.bind(('localhost',6969)) #开始监听 server.listen() #等别人连接进来 conn, addr = server.accept() #接收客户端发送的东西 data = conn.recv(1024) #也可以发送 conn.send(data.upper()) #关闭服务器端 server.close() # 客户端步骤 # 实例化一个socket,作用是声明socket实例,同时生成socket连接对象 client = socket.socket() #开始连接 client.connect(('localhost',6969)) #发送数据 client.send() #关闭客户端 client.close() python3中把字符串的编码变成了unicode,文件默认编码变成了utf-8。把str

python摸爬滚打之day26----网络编程之socket

十年热恋 提交于 2020-02-21 12:33:07
1、网络通信原理   互联网的本质就是一系列的网络协议, 统称为互联网协议.    互联网协议的功能:定义计算机如何接入internet,以及接入internet的计算机通信的标准。   互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层.   对于tcp\ip 五层协议, 每层运行常见物理设备有以下几种: 2、tcp\ip五层协议模型讲解      我们将应用层,表示层,会话层并作应用层,从tcp/ip五层协议的角度来阐述每层的由来与功能,搞清楚了每层的主要协议就理解了整个互联网通信的原理.     首先,用户感知到的只是最上面一层应用层,自上而下每层都依赖于下一层,所以我们从最下一层开始切入,比较好理解.     每层都运行特定的协议, 越往上越靠近用户,越往下越靠近硬件.   2.1 物理层     孤立的计算机之间要想一起玩,就必须接入internet,言外之意就是计算机之间必须完成组网.     物理层功能:主要是基于电器特性发送高低电压(电信号),高电压对应数字1,低电压对应数字0   2.2 数据链路层     单纯的电信号0和1没有任何意义,必须规定电信号多少位一组.     数据链路层的功能:定义了电信号的分组方式.      以太网协议----ethernet        以太网协议规定: 一组电信号组成一个数据包(叫做帧),

java中发送http请求

∥☆過路亽.° 提交于 2020-02-21 05:59:33
使用HttpClient发送http请求: 1 public String cawl(String url){ 2 try { 3 CloseableHttpClient httpClient = HttpClientBuilder.create().build();//初始化 4 CloseableHttpResponse httpResponse = httpClient.execute(new HttpGet(url));//获取页面信息 5 String result = EntityUtils.toString(httpResponse.getEntity());//将对象转换成字符串输出 6 return result; 7 } catch (IOException e) { 8 throw new RuntimeException(e); 9 } 10 } 使用Url发送http请求: 抽象类URLConnection:所有类的超类,它代表应用程序和 URL 之间的通信链接。此类的实例可用于读取和写入此 URL 引用的资源 1 try { 2 URL url = new URL("http://www.baidu.com"); 3 URLConnection connection = url.openConnection(); 4 for (int i = 1;;i+

网络协议及tcp协议详解

青春壹個敷衍的年華 提交于 2020-02-20 14:35:52
问题来源:面试中面试官会看到你的简历上写着熟悉网络、http、tcp协议等,那你真的了解他吗?今天它来了 一、网络协议: 层次说明: 第七层:应用层( http ) 为操作系统或网络应用程序提供访问网络服务的接口。 第六层:表示层 处理两个通信系统中交换信息的表示方式。为上层用户解决用户信息的语法问题。包括数据格式交换、数据加密与解密、数据压缩与终端类型的转换。 第五层:会话层 在两个节点之间建立端连接。为端系统的应用程序之间提供了对话控制机制。会话层不参与具体的传输,它提供包括访问验证和会话管理在内的建立和维护应用之间通信的机制。如服务器验证用户登录便是由会话层完成的。 第四层:传输层( tcp ) 为会话层用户提供一个端到端的可靠、透明和优化的数据传输服务机制。 第三层:网络层 网络层的任务就是选择合适的网间路由和交换结点, 确保数据及时传送。 第二层:数据链路层 在物理层提供比特流服务的基础上,建立相邻结点之间的数据链路,通过差错控制提供数据帧在信道上无差错的传输,并进行各电路上的动作系列。数据链路层在不可靠的物理介质上提供可靠的传输。该层的作用包括:物理地址寻址、数据的成帧、流量控制、数据的检错、重发等。 第一层:物理层 物理层的主要功能是利用物理传输介质为数据链路层提供物理连接,以便透明的传送比特流。 二、tcp协议: 说说TCP三次握手的过程? 第一次握手

利用Delphi编写Socket通信程序2

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-20 14:13:35
  笔者在工作中遇到对局域网中各工作站与服务器之间进行Socket通信的问题。现在将本人总结出来的TServerSocket和TClientSocket两个组件的基本用法写出来,希望与您分享。   ClientSocket组件为客户端组件。它是通信的请求方,也就是说,它是主动地与服务器端建立连接。   ServerSocket组件为服务器端组件。它是通信的响应方,也就是说,它的动作是监听以及被动接受客户端的连接请求,并对请求进行回复。   ServerSocket组件可以同时接受一个或多个ClientSocket组件的连接请求,并与每个ClientSocket组件建立单独的连接,进行单独的通信。因此,一个服务器端可以为多个客户端服务。   设计思路   本例包括一个服务器端程序和一个客户端程序。客户端程序可以放到多个计算机上运行,同时与服务器端进行连接通信。   本例的重点,一是演示客户端与服务器端如何通信;二是当有多个客户端同时连接到服务器端时,服务器端如何识别每个客户端,并对请求给出相应的回复。为了保证一个客户端断开连接时不影响其它客户端与服务器端的通信,同时保证服务器端能够正确回复客户端的请求,在本例中声明了一个记录类型:    type  client_record=record  CHandle: integer; //客户端套接字句柄  CSocket

python- 粘包 struct,socketserver

隐身守侯 提交于 2020-02-19 08:31:33
黏包 黏包现象 让我们基于tcp先制作一个远程执行命令的程序(命令ls -l ; lllllll ; pwd) 1 res=subprocess.Popen(cmd.decode('utf-8'), 2 shell=True, 3 stderr=subprocess.PIPE, 4 stdout=subprocess.PIPE) 5 6 的结果的编码是以当前所在的系统为准的,如果是windows,那么res.stdout.read()读出的就是GBK编码的,在接收端需要用GBK解码 7 8 且只能从管道里读一次结果 9 10 注意 注意 同时执行多条命令之后,得到的结果很可能只有一部分,在执行其他命令的时候又接收到之前执行的另外一部分结果,这种显现就是黏包。 基于tcp协议实现的黏包 1 #_*_coding:utf-8_*_ 2 from socket import * 3 import subprocess 4 5 ip_port=('127.0.0.1',8888) 6 BUFSIZE=1024 7 8 tcp_socket_server=socket(AF_INET,SOCK_STREAM) 9 tcp_socket_server.setsockopt(SOL_SOCKET,SO_REUSEADDR,1) 10 tcp_socket_server.bind(ip_port)

用Python开发基于Socket聊天程序

生来就可爱ヽ(ⅴ<●) 提交于 2020-02-19 04:01:14
Python自带Socket库,我们只需要确保防火墙端口打开,就可以在两台机器间建立Socket连接了 首先server端是需要绑定并监听端口的,而client只要访问这个端口就可以建立连接。 服务端在listen时,一旦接到访问后就可以拿到client的信息了, 我们可以用input方法接收键盘输入,再把字符串encode为byte类型就可以发送了。同样在接受大小为512字节的信息后,decode为字符串打印出来。 client端则只要知道服务端的ip和端口,用connect连接即可,其它输入输出基本类似 最后最后,要close连接,不然会浪费资源。 聊天的结果如图 是不是很简单,有没有破除你对socket编程的敬畏之心啊?当然是这段程序太简单了,不过用在工作局域网里聊天也足够了 扫码关注公众号,获取最新文章 来源: CSDN 作者: DigiHacker 链接: https://blog.csdn.net/atulxqiang/article/details/104374476

五分钟让你拥有自己的聊天室

纵然是瞬间 提交于 2020-02-19 00:53:18
1.socket(链接的一方的终端) 因为要进行聊天程序的开发,就需要后台服务器实时监控,而http是非持久性的链接,所以要用socket(持久性的链接)。 聊天软件的开发逻辑: 一.A发送消息--->服务端 A要发送消息,首先要有客户端,就是A 1.const net = require("net")----因为要建立持久性的链接,所以用net模块 2.const readline = require("readline")----引入可以在终端读写的模块 3.const client = new net.Socket()----创建客户端,用socket构造 4.const rl = readline.createInterface({----建立终端输入和输出,完成在终端可以读写的功能 input:process.stdin,----终端输入 output:process.stdout----终端输出 }) 5.client.setEncoding("utf8")----将接受的服务端的buffer文件转换为字符串 5.client.connect(9000,"127.0.0.1",()=>{----链接服务端,参数一:是服务端的端口号,参数二:自己的ip地址 client.on("data",(data)=>{----接受服务端传递过来的信息 cosole.log(data

linux网络编程IO模型

为君一笑 提交于 2020-02-18 22:25:37
同步与异步 : 同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成。 异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了,异步一般使用状态、通知和回调。 阻塞与非阻塞 阻塞是指调用结果返回之前,当前线程会被挂起,一直处于等待消息通知,不能够执行其他业务。 非阻塞是指在不能立刻得到结果之前,该函数不会阻塞当前线程,而会立刻返回。 五种IO模型 对于一次IO访问,数据会先被拷贝到内核的缓冲区中,然后才会从内核的缓冲区拷贝到应用程序的地址空间。需要经历两个阶段: 1. 准备数据 2. 将数据从内核缓冲区拷贝到进程地址空间 由于存在这两个阶段,Linux产生了下面五种IO模型。 阻塞IO 当用户进程调用了recvfrom调用时,内核进入IO的第一个阶段:准备数据(内核需要等待足够的数据再拷贝),这个过程需要等待,用户进程会被阻塞,等内核将数据准备好,然后拷贝到用户地址空间,内核返回结果,用户进程才从阻塞态进入就绪态。 Linux中,默认情况下所有的socket都是阻塞的。 非阻塞IO 当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error。用户进程判断结果是一个error时,它就知道数据还没有准备好