socket

java学习与应用(3.5)--网络、流、方法引用

Deadly 提交于 2020-02-10 18:28:30
网络编程 C/S结构,B/S结构。TCP/IP传输控制协议/网络协议(面向连接,三次握手,无差错传输)。UDP用户数据报协议(无连接,发送端不确认接收端是否存在,64kb限制)。 IPv4地址(42亿个,每个4字节),IPv6地址(每个16字节)。网络软件打开后,由操作系统分配端口号(两个字节0-65535,1024之前的端口号已被分配)。 端口号使得数据能够正确发送到指定位置,80网络端口,3306mysql端口,oracle1521端口,tomcat端口8080. 客户端请求服务器端,建立连接IO对象,使用IO对象(网络字节流对象)进行通信。对应的类为Socket类(客户端),ServerSocket类(服务器端)。 服务器端(没有IO流)的accept方法,获取请求的客户端对象Socket。使用获取的对应客户端的Socket与该客户端交互。 Socket类,套接字(IP和端口号)。其构造方法Socket传入套接字,使用getOutputStream方法返回输出流,使用getInputStream方法返回输入流,close关闭。 客户端:getOutputStream的write方法给服务器发送数据,getInputStream的read方法读取服务器返回数据。 服务端:ServerSocket类,构造方法传入端口号建立对象,accept方法获取客户端的Socket

漏洞扫描-端口

孤街醉人 提交于 2020-02-10 14:46:01
目的:构建一个简单的漏洞扫描器,它的主要功能是连接一个TCP套接字,从目标服务器上读取banner,并将其与自定义的漏洞服务器版本相比较。 实施前奏: 变量:在python中,变量是指 可以存储可变数据的标识体,这个数据可以是整数型、浮点型、字符型、布尔型,或者是列表、字典等更复杂的数据。接下来定义一个变量port用来存储整型和一个变量banner用来存储字符串。然后将这两个变量进行拼接,因为某些特性这里将整型的port变量所存储的值临时转换为字符型。 >>> port = 21 >>> banner = "FTP Server" >>> print "[+] Checking for "+banner+" on port "+str(port) [+] Checking for FTP Server on port 21 当我们声明变量时python程序准备给变量预留内存空间,而解释器会自动的为它们进行类型分配并确定通知后台程序具体分配多少内存空间,比如下面这个样子: >>> type(banner) <type 'str'> >>> type(port) <type 'int'> >>> portList = [21,22,80.445] >>> type(portList) <type 'list'> >>> portOpen = True >>> type(portOpen

Socket获取天气

戏子无情 提交于 2020-02-10 14:16:17
import java.io.BufferedReader; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.Socket; public class TalkClient { public static void main(String[] args) { try{ //向本机的4700端口发出客户请求 Socket socket=new Socket("restapi.amap.com",80); //由Socket对象得到输出流,并构造PrintWriter对象 PrintWriter os=new PrintWriter(socket.getOutputStream()); os.println("GET https://restapi.amap.com/v3/weather/weatherInfo?city=370883&key=。。。&output=xml"); os.flush(); //由Socket对象得到输入流,并构造相应的BufferedReader对象 BufferedReader input = new BufferedReader(new InputStreamReader(socket.getInputStream(), "UTF-8"));

10.17 总结

岁酱吖の 提交于 2020-02-10 09:15:02
网络编程 并发编程 数据库开发 web前端 1.软件开发架构: 开发软件,必须要开发一套客户端与服务端。 客户端与服务端的作用: 服务端:24小时不间断提供服务 客户端:如果想要找服务,就去寻找服务并享受 软件开发架构分为两种: ​ C/S架构:Client(客户端)Sever(服务端) ​ 优点:软件的使用稳定,并且可以节省网络资源。 ​ 缺点:1.若用户想在同一个设备上使用多个软件,必须下载多个客户端;2.软件的每一次更新,客户端也必须跟着重新下载更新。C/S架构的软件:电脑上的QQ,pycharm等,手机端的微信,王者荣耀等。 ​ B/S架构:Browser:浏览器 Server:服务端 ​ 优点:以浏览器充当客户端,无需用户下载多个软件,也无需用户下载更新软件版本,直接在浏览器上访问需要的软件。 ​ 缺点:消耗网络资源过大,当网络不稳定时,软件的使用也不稳定。 ​ B/S架构的软件:例如,在浏览器上输入某个软件的域名( http://oldboyedu.com/ )。 2.后期学习 ​ 网络编程、并发编程、数据库开发,可以开发一套C/S架构的软件。(防优酷系统) ​ 前端html、css、js、web框架(网络编程、并发编程)可以开发一套B/S架构的软件(bbs系统) 3.网络编程 -网络编程发展历史 所有先进的技术都源自于军事,希望通过远程获取数据,所有出现了‘网络编程’

Socket

泪湿孤枕 提交于 2020-02-10 05:37:50
学socket编程的意义   客户端/服务器架构(c/s架构) 硬件c/s架构(打印机) 软件c/s架构         互联网中处处是C/S架构     如某网站是服务端,你的浏览器是客户端(B/S架构也是C/S架构的一种)     腾讯作为服务端为你提供视频,你得下个腾讯视频客户端才能看它的视频   C/S架构与socket的关系:      socket就是为了更加便捷的完成C/S架构的开发 OSI七层    一个完整的计算机系统是由硬件、操作系统、应用软件三者组成,具备了这三个条件,一台计算机系统就可以自己跟自己玩了(打个单机游戏,玩个扫雷啥的)    如果你要跟别人一起玩,那你就需要上网了,什么是互联网?   互联网的核心就是由一堆协议组成,协议就是标准,比如全世界人通信的标准是英语。    人们按照分工不同把互联网协议从逻辑上划分了层级:     互联网协议按照功能不同分为osi七层或tcp/ip五层或tcp/ip四层:          每层常用的物理设备:         为何学习socket一定要先学习互联网协议:         1.首先:本节课程的目标就是教会你如何基于socket编程,来开发一款自己的C/S架构软件   2.其次:C/S架构的软件(软件属于应用层)是基于网络进行通信的   3.然后:网络的核心即一堆协议,协议即标准

JAVA IO/NIO

痴心易碎 提交于 2020-02-10 00:50:55
个人博客 http://www.milovetingting.cn JAVA IO/NIO 前言 本文为学习Java相关知识所作笔记,参考以下资料: https://github.com/Snailclimb/JavaGuide ,感谢原作者的分享! JAVA IO/NIO 阻塞 IO 模型 最传统的一种 IO 模型,即在读写数据过程中会发生阻塞现象。当用户线程发出 IO 请求之后,内核会去查看数据是否就绪,如果没有就绪就会等待数据就绪,而用户线程就会处于阻塞状态,用户线程交出 CPU。当数据就绪之后,内核会将数据拷贝到用户线程,并返回结果给用户线程,用户线程才解除 block 状态。典型的阻塞 IO 模型的例子为:data = socket.read();如果数据没有就绪,就会一直阻塞在 read 方法 非阻塞 IO 模型 当用户线程发起一个 read 操作后,并不需要等待,而是马上就得到了一个结果。如果结果是一个error 时,它就知道数据还没有准备好,于是它可以再次发送 read 操作。一旦内核中的数据准备好了,并且又再次收到了用户线程的请求,那么它马上就将数据拷贝到了用户线程,然后返回。所以事实上,在非阻塞 IO 模型中,用户线程需要不断地询问内核数据是否就绪,也就说非阻塞 IO 不会交出 CPU,而会一直占用 CPU。典型的非阻塞 IO 模型一般如下: while

linux下netlink的使用简介

廉价感情. 提交于 2020-02-09 14:41:58
linux下netlink的使用简介 一、什么是netlink Netlink套接字是用以实现用户进程与内核进程通信的一种特殊的进程间通信(IPC) ,也是网络应用程序与内核通信的最常用的接口。 在Linux 内核中,使用netlink 进行应用与内核通信的应用有很多,如 路由 daemon(NETLINK_ROUTE) 用户态 socket 协议(NETLINK_USERSOCK) 防火墙(NETLINK_FIREWALL) netfilter 子系统(NETLINK_NETFILTER) 内核事件向用户态通知(NETLINK_KOBJECT_UEVENT) 通用netlink(NETLINK_GENERIC) Netlink 是一种在内核与用户应用间进行双向数据传输的非常好的方式,用户态应用使用标准的 socket API 就可以使用 netlink 提供的强大功能,内核态需要使用专门的内核 API 来使用 netlink。 一般来说用户空间和内核空间的通信方式有三种: /proc、ioctl、Netlink 。而前两种都是单向的,而Netlink可以实现双工通信。 Netlink 相对于系统调用,ioctl 以及 /proc文件系统而言,具有以下优点: netlink使用简单,只需要在 include/linux/netlink.h 中增加一个新类型的 netlink

python实现一个客户端与服务端的通信

北战南征 提交于 2020-02-09 14:04:14
函数介绍 Socket对象方法: 服务端: 函数 描述 .bind() 绑定地址关键字,AF_INET下以元组的形式表示地址。常用bind((host,port)) .listen() 监听TCP,可以挂起的最大连接数,该值至少为1,一般设为5即可 .accept() 被动接受TCP客户端的连接 客户端: 函数 描述 .connect() 初始化服务器连接 .connect_ex() 是对connect()函数的扩展,当出错时返回出错码,不报异常 其它函数: 函数 描述 .recv() 接收数据,数据以字符串的形式返回,bufsize指定接收的最大数据量。 .send() 发送数据,将string中的数据发送到连接的套接字,返回值是要发送的字节数量,通常使用.encode()函数对数据进行转码 .senddall() 发送完整的数据,在返回之前会尝试发送所有数据,成功返回None,失败则抛出异常。 .recvfrom() 与recv()函数类似,不同的是返回值是(data,address),其中data是包含接收数据的字符串,address是发送数据的套接字地址。 .sendto() 发送UDP数据,将数据发送到套接字,形式是(ipaddr,port)的元组。 .close() 关闭套接字 服务端 使用socket函数来创建一个socket对象,并设置一个socket服务

使用Zookeeper实现负载均衡轮询例子

≯℡__Kan透↙ 提交于 2020-02-09 13:37:30
1.原理 ​ 使用Zookeeper实现负载均衡原理,服务器端将启动的服务注册到,zk注册中心上,采用临时节点。客户端从zk节点上获取最新服务节点信息,本地使用负载均衡算法,随机分配服务器。 2.实例代码相关 Maven依赖: <dependencies> <dependency> <groupId>com.101tec</groupId> <artifactId>zkclient</artifactId> <version>0.8</version> </dependency> <dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.6</version> </dependency> </dependencies> ZkServerScoekt: public class ZkServerScoekt implements Runnable { private static int port = 18081; public static void main(String[] args) throws IOException { ZkServerScoekt server = new ZkServerScoekt(port);

基于UDP协议的socket套接字编程

坚强是说给别人听的谎言 提交于 2020-02-09 07:26:12
目录 一、UDP套接字简单示例 1.1 服务端 二、客户端 三、UPD套接字无粘包问题 3.1 服务端 3.2 客户端 四、qq聊天 4.1 服务端 4.2 客户端1 4.3 客户端2 4.4 运行结果 一、UDP套接字简单示例 1.1 服务端 import socket server = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP server.bind(('127.0.0.1', 8080)) while True: data, client_addr = server.recvfrom(1024) print('===>', data, client_addr) server.sendto(data.upper(), client_addr) server.close() 二、客户端 import socket client = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 数据报协议-》UDP while True: msg = input('>>: ').strip() # msg='' client.sendto(msg.encode('utf-8'), ('127.0.0.1', 8080)) data, server_addr =