socket

测试ip端口访问

一曲冷凌霜 提交于 2020-03-17 17:38:45
某厂面试归来,发现自己落伍了!>>> public static boolean testIpPortIfNotLink(String ip, String port) { Socket client = null ; try { client = new Socket(ip, Integer. parseInt (port)); client.close(); return true ; } catch (Exception e) { return false ; } } 来源: oschina 链接: https://my.oschina.net/thomas2/blog/3196744

socket编程——tcp通信

自古美人都是妖i 提交于 2020-03-17 17:23:18
tcp通信流程 :面向连接,可靠传输,面向字节流 客户端(client): 创建套接字 绑定地址信息(不推荐主动) 向服务端发出连接请求 收 / 发数据 关闭套接字 服务端(server): 创建套接字 ——在内核创建socket结构体与网卡建立联系 为套接字绑定地址信息 ——告诉操作系统哪些数据交给我处理—放到我的接收缓冲区 开始监听 ——告诉操作系统可以开始接收哭护短的连接请求—客户端与服务端进行tcp通信必须首先建立连接—确保双方都具有数据收发的能力。 当服务端收到了客户端的连接请求,连接的建立过程是在内核完成的。 tcp服务端最早的套接字只用于接收新连接请求,连接请求到来之后创建新的套接字,创建的新的套接字用于与客户端进行后续的通信 服务端程序获取新创建的socket套接字操作句柄 服务端程序在内核会接收新连接,创建新的socket 服务端程序获取内核中新创建的socket操作句柄 在服务端程序这边通过这个获取的操作句柄与客户端进行通信 服务端通过新建套接字可以与客户端进行数据通信 接收数据 / 发送数据 tcp在数据通信的时候,谁先发送都可以(因为这时候连接已经建立) 关闭套接字:释放资源 socket进行tcp通信的接口介绍: 1、创建套接字 int socket ( int domain , int type , int protocol ) (地址域 AF_INET

Python实现远程开关机【高薪必备技术】

百般思念 提交于 2020-03-17 10:31:10
用 Python 关机你肯定听过或者实践过,那么用 Python 开机呢?这是一个神奇的方法,教你如何用 Python 来开机。 PS注意:很多人学Python过程中会遇到各种烦恼问题,没有人解答容易放弃。为此小编建了个Python全栈免费解答.裙 :一久武其而而流一思(数字的谐音)转换下可以找到了,不懂的问题有老司机解决里面还有免非最新Python教程下载,,一起相互监督共同进步! 本文目标 远程开机原理 Python 远程开机代码实现 Python 关机说明 Python 开机 关于用程序来开机,是怎么做到的呢?这就是 WOL 技术 Wake-On-Lan, 利用计算机在关机或休眠状态时,网卡及主板部分仍然有微弱的供电,当然要保持电源是插上的,而且是有线连接。所以即使在关机情况下,网卡还是有一定运作能力的,可以监听计算机外部的网上广播信息,当发现特定格式的信息后就会执行开机。现在的主板基本都支持。 只需要在网络适配器属性中配置下面两个选项 0.png 1.png 下图这个勾不能选上,我们要保证网卡在关机后仍有供电,如果你关机后,网口的灯不亮了,就不行了,要保持网口灯亮。 2.png 这个特定数据也有个好听的名字叫 Magic Packet(魔法数据包)。一般用过 UDP 协议进行广播。端口一般是7或者9. 魔法数据包总是以"FF FF FF FF FF FF" 连续6个 "FF

socket编程简单思路

时间秒杀一切 提交于 2020-03-17 07:15:15
示例程序是同步套接字程序,功能很简单,只是客户端发给服务器一条信息,服务器向客户端返回一条信息;这里只是一个简单的示例,是一个最基本的 socket 编程流程,在接下来的文章中,会依次记录套接字的同步和异步,以及它们的区别。 下面是示例程序的简单步骤说明 服务器端: 第一步:用指定的端口号和服务器的 ip 建立一个 EndPoint 对像; 第二步:建立一个 Socket 对像; 第三步:用 socket 对像的 Bind() 方法绑定 EndPoint ; 第四步:用 socket 对像的 Listen() 方法开始监听; 第五步:接受到客户端的连接,用 socket 对像的 Accept() 方法创建新的 socket 对像用于和请求的客户端进行通信 ; 第六步:通信结束后一定记得关闭 socket; 代码: using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; namespace server { class Program { static void Main(string[] args) { int port = 2000; string host = "127.0.0.1"; /**////创建终结点

很全的linux网络编程技巧

我只是一个虾纸丫 提交于 2020-03-17 03:51:39
1. LINUX 网络编程基础知识 1 1.1. TCP/IP 协议概述 1 1.2. OSI 参考模型及 TCP/IP 参考模型 1 1.3. TCP 协议 3 1.4. UDP 协议 5 1.5. 协议的选择 6 2. 网络相关概念 6 2.1. socket 概念 7 2.2. socket 类型 8 2.3. socket 信息数据结构 8 2.4. 数据存储优先顺序的转换 8 2.5. 地址格式转化 9 2.6. 名字地址转化 10 3. socket 编程 13 3.1. 使用 TCP 协议的流程图 13 3.2. 使用 UDP 协议的流程图 24 3.3. 设置套接口的选项 setsockopt 的用法 31 3.4. 单播、广播、组播(多播) 32 1. LINUX 网络编程基础知识 1.1. TCP/IP 协议概述 协议 protocol:通信双方必须遵循的规矩 由iso规定 rpc文档 osi参考模型:(应-表-会-传-网-数-物) è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层 tcp/ip模型4层: 应用层 {http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件} 传输层 {tcp传输控制协议,udp用户数据包协议} 网络层 {ip网际互联协议 icmp网络控制消息协议

Python 不可不知的 Socket 通信

橙三吉。 提交于 2020-03-17 02:06:02
原文地址: https://www.zhblog.net/go/python/advanced/python-socket-selectors?t=563 Socket API 是用来通过网络传递信息的,也为进程间通信提供一种形式。 最常见的 socket 程序就是 client-server 应用程序,下面在同一主机上进程之间进行通信。 首先,了解 socket 的 server 端和 client 端 api。 Socket API Python 的 socket 模块提供了 socket api 的接口。 主要的方法: socket() bind() listen() accept() connect() connect_ex() send() recv() close() python 提供了直接映射到操作系统的 api(底层C),保证了方便与一致性。 TCP Socket 使用 socket.socket() 创建一个 socket 对象,并指定 socket 类型为 socket.SOCK_STREAM,这就默认我们使用的协议为 TCP,在通常情况下,这就是我们想要使用的。 TCP 协议优点: 可靠性:发送者会检测网络传输中是否丢包,并重发在网络中丢掉的数据包。 顺序发送:数据被读取时保证数据是发送者写的顺序。 另外,UDP socket 可以指定为 socket

socket阻塞与非阻塞,同步与异步

ⅰ亾dé卋堺 提交于 2020-03-17 01:46:42
某厂面试归来,发现自己落伍了!>>> 简单点说 : 阻塞就是干不完不准回来, 非组赛就是你先干,我现看看有其他事没有,完了告诉我一声 我们拿最常用的 send 和 recv 两个函数来说吧 ... 比如你调用 send 函数发送一定的 Byte, 在系统内部 send 做的工作其实只是把数据传输 (Copy) 到 TCP/IP 协议栈的输出缓冲区 , 它执行成功并不代表数据已经成功的发送出去了 , 如果 TCP/IP 协议栈没有足够的可用缓冲区来保存你 Copy 过来的数据的话 ... 这时候就体现出阻塞和非阻塞的不同之处了 : 对于阻塞模式的 socket send 函数将不返回直到系统缓冲区有足够的空间把你要发送的数据 Copy 过去以后才返回 , 而对于非阻塞的 socket 来说 send 会立即返回 WSAEWOULDDBLOCK 告诉调用者说 :" 发送操作被阻塞了 !!! 你想办法处理吧 ..." 对于 recv 函数 , 同样道理 , 该函数的内部工作机制其实是在等待 TCP/IP 协议栈的接收缓冲区通知它说 : 嗨 , 你的数据来了 . 对于阻塞模式的 socket 来说如果 TCP/IP 协议栈的接收缓冲区没有通知一个结果给它它就一直不返回 : 耗费着系统资源 .... 对于非阻塞模式的 socket 该函数会马上返回 , 然后告诉你

NIO socket 的简单连接池

元气小坏坏 提交于 2020-03-16 11:52:13
某厂面试归来,发现自己落伍了!>>> 在最近的项目中,需要写一个socket 与 底层服务器通信的模块。在设计中,请求对象被封装 xxxRequest,消息返回被封装为 xxxResponse. 由于socket的编程开发经验少,一开始我使用了短连接的方式,每个请求建立一个socket通信,由于每个socket只进行一次读写,这大大浪费了 系统资源。 于是考虑使用长连接,系统公用一个client socket 并对send 操作进行加锁,结果在处理并发的时候,各种慢,各种等待。没有办法,考虑使用两节池,预先创建多个 client socket 放入 连接池,需要发送请求时从连接池获取一个socket,完成请求时放入连接池中。下面是一个简单的实现。 private static String IP=GlobalNames.industryIP; private static int PORT =Integer.parseInt(GlobalNames.industryPort); private static int CONNECTION_POOL_SIZE = 10; private static NIOConnectionPool self = null; private Hashtable<Integer, SocketChannel> socketPool = null; /

《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高?

房东的猫 提交于 2020-03-15 20:52:16
原文: 《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高? 能坚持别人不能坚持的,才能拥有别人未曾拥有的。 关注 编程大道 公众号,让我们一同坚持心中所想,一起成长!! 《【面试突击】— Redis篇》-- Redis的线程模型了解吗?为啥单线程效率还这么高? 在这个系列里,我会整理一些面试题与大家分享,帮助年后和我一样想要在金三银四准备跳槽的同学。 我们一起巩固、突击面试官常问的一些面试题,加油!! 1、面试题 Redis和Memcached有什么区别? Redis的线程模型是什么? 为什么Redis是单线程的但是还可以支撑高并发? 2、面试官心理分析 问这个的时候就是问你Redis的原理了,看你是不是思考过,研究过。Redis最基本的一个内部原理和特点,就是Redis实际上是个单线程工作模型。你要是连这个都不知道,那后面在使用Redis的时候,如果出了问题岂不是什么都不知道,无从下手? 还有可能面试官会问问你Redis和Memcached的区别。不过说实话,近几年,面试官都不太喜欢这么问了。因为memcached是早些年各大互联网公司常用的缓存方案,但是现在近几年基本都是Redis,没什么公司用memcached了。 3、温馨提醒 如果你要是现在还不知道redis和memcached是啥

(1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制

耗尽温柔 提交于 2020-03-15 16:09:15
1.基于tcp协议的编程模型(重中之重) 1.1 编程模型 服务器: (1)创建ServerSocket类型的对象,并提供端口号; (2)等待客户端的连接请求,调用accept()方法; (3)使用输入输出流进行通信; (4)关闭Socket并释放有关的资源; 客户端: (1)创建Socket类型的对象,并提供服务器的IP地址和端口号; (2)使用输入输出流进行通信; (3)关闭Socket并释放有关的资源; 1.2 相关类和方法的解析 (1)ServerSocket类 java.net.ServerSocket类主要用于描述服务器的套接字(大插排)。 ServerSocket(int port) - 根据参数指定的端口号来构造对象。 Socket accept() - 侦听并接受到此套接字的连接请求。 void close() - 关闭套接字。 (2)Socket类 java.net.Socket类用于描述客户端的套接字,该套接字是两台机器间通信的端点。 Socket(String host, int port) - 根据参数指定的主机名和端口号来构造对象。 InputStream getInputStream() - 用于获取当前Socket的输入流。 OutputStream getOutputStream() - 用于获取当前Socket的输出流。 void close()