socket

Java网络编程——概念

有些话、适合烂在心里 提交于 2020-01-16 04:21:57
基础 TCP协议 IP协议 TCP/IP UDP协议 端口 套接字 Java.net包 InetAddress类 任何一台运行的Internet上的主机都有IP地址和当地的DNS能够解析的域名 在Java.net包中就提供了IP地址的封装类InetAddress,InetAdress类用于描述和包装一个Internet IP地址,并提供了相关的常见的方法 TCP的网络编程 Socket 重要的Socket API 服务器端程序设计 客户端程序设计 UDP通信概念 UDP通信又称数据包通信,UDP协议采用的是基于数据包的网络通信。数据包是一种分组交换的形式,就是把所有要传送的数据分段打包,再传出去,他是无连接型的,是把打成的每个包都作为独立的报文传出去,所以叫做数据包。 在java的UDP网络程序中,主要用到两个类,java.net.DatagramSocket和java.net.DatagramPacket类,前者是发送和接收数据的数据包套接字,后者是UDP所传输的数据包,即打包后的数据。 TCP协议 TCP (transmission Control protocol) 即传输控制协议,它是传输层协议,主要负责数据得分组和重组,TCP协议是一种可靠的数据传输协议,它是面向连接的,它可以保证数据的传送时间,顺序,和内容的正确无误。但是在保证数据高效的同时,它的传输速度往往是比较慢的

signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN);

感情迁移 提交于 2020-01-16 03:52:59
** signal(SIGCHLD, SIG_IGN)和signal(SIGPIPE, SIG_IGN); signal(SIGCHLD, SIG_IGN); 因为并发服务器常常fork很多子进程,子进程终结之后需要服务器进程去wait清理资源。如果将此信号的处理方式设为忽略,可让内核把僵尸子进程转交给init进程去处理,省去了大量僵尸进程占用系统资源。(Linux Only) 对于某些进程,特别是服务器进程往往在请求到来时生成子进程处理请求。如果父进程不等待子进程结束,子进程将成为僵尸进程(zombie)从而占用系统资源。如果父进程等待子进程结束,将增加父进程的负担,影响服务器进程的并发性能。在Linux下可以简单地将 SIGCHLD信号的操作设为SIG_IGN。 signal(SIGPIPE, SIG_IGN); TCP是全双工的信道, 可以看作两条单工信道, TCP连接两端的两个端点各负责一条. 当对端调用close时, 虽然本意是关闭整个两条信道, 但本端只是收到FIN包. 按照TCP协议的语义, 表示对端只是关闭了其所负责的那一条单工信道, 仍然可以继续接收数据. 也就是说, 因为TCP协议的限制, 一个端点无法获知对端的socket是调用了close还是shutdown. 对一个已经收到FIN包的socket调用read方法, 如果接收缓冲已空, 则返回0,

python Udp与Tcp

耗尽温柔 提交于 2020-01-16 01:33:54
一.UDP 首先导入socket 1.客户端 1.创建套接字(socket) udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 2.绑定一个地址,端口 udp_socket.bind("", 8080) 没有绑定时随机分配 3.发送信息(接受消息) udp_socket.sendto() / udp_socket.recvfrom(1024) 4.关闭 udp_socket.close ​ 2.服务端 1.创建套接字 udp_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 2.绑定端口 udp_socket.bind("", 8080) 3.发送接收 udp_socket.recvfrom(1024) / udp_socket.sendto() 1024 代表接受1024字节 4.关闭 udp_socket.close() 二.TCP 1.客户端client 1.创建套接字 tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 2.链接服务器 1.ip tcp_ip = input(“请输入ip”) 2.port tcp_port = int(input(“请输入port

2020/01/15 03-socketserver模块

半腔热情 提交于 2020-01-16 01:25:54
socket库比较底层,但是之前在写tcp server的时候,需要多线程, 那对底层的socket进行封装,有了socketserver base一般只是完成部分功能,并没有全部完成,基于baseserver扩展,有了TCPServer,TCP server和UDPserver有部分代码重合,TCPServer派生出一个UDPserver, UDPserver把跟tcpserver 不一样的地方覆盖掉了 然后再衍生出其他的类,UnixStreadmServer,UnixDatagramserver 一般直接使用TCPserver和使用UDPserver 现在的TCPserver和UDPserver是同步的库,不支持多线程,不支持并发 提供了4个类,TCPserver,UDPserver,UnixStreamserver,UnixDatagramserver,是同步类 MIxin是来增强功能的,靠MIO,把mixin往前放,优先使用的属性从MIO的第一位MIXIN属性来,抢在被人前面来 Mixin是多继承来实现的,是放在继承列表的第一个 ForkingMixin 进程间的forking ,多进程方式 ThreadingMixin 多线程间的,相当于给TCP,UDPserver增加多线程能力 4个mixin出来的完全是异步的 TCPserver和UDPserver当同步来用

关于FIN_WAIT2

左心房为你撑大大i 提交于 2020-01-16 00:10:40
FIN_WAIT2问题 让我们热热身,通过一张旧图来回忆一下 TCP 关闭连接时的情况: TCP Close 按照正常的状态迁移路径,当 FIN_WAIT2 收到 FIN 包后会迁移到 TIME_WAIT 状态。如果没有收到 FIN 包,那么连接状态会如何迁移,我们不妨测试一下: #!/usr/bin/env python import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.bind(('127.0.0.1', 1234)) s.listen(1) c, _ = s.accept() time.sleep(1000) c.close() 如上是用 Python 实现的一个简单的 server 演示代码,需要注意的是我在 close 前设置了一个巨大的延迟时间,从而达到拖延服务端发出 FIN 包的目的。与之相对应的我们再实现一个简单的 client 演示代码,它没什么可说的,就是连上后直接关闭: #!/usr/bin/env python import socket import time s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) s.connect(('127.0.0.1', 1234)) s.close(

Java BIO NIO 与 AIO

二次信任 提交于 2020-01-15 22:39:14
回顾 上一章我们介绍了操作系统层面的 IO 模型。 阻塞 IO 模型。 非阻塞 IO 模型。 IO 复用模型。 信号驱动 IO 模型(用的不多,知道个概念就行)。 异步 IO 模型。 并且介绍了 IO 多路复用的底层实现中,select,poll 和 epoll 的区别。 几个概念 我们在这里在强调一下几个概念。 一个 IO 操作的具体步骤: 对于操作系统来说,进程是没有直接操作硬件的权限的,所以必须请求内核来帮忙完成。 等待数据准备好,对于一个套接字上得操作,这一步骤关系到数据从网络到达,并将其复制到内核某个缓冲区。 将数据从内核缓冲区复制到进程缓冲区。 同步和异步的区别在于第二个步骤是否阻塞,如果从内核缓冲区复制到用户缓冲区的过程阻塞,那么就是同步 IO,否则就是异步 IO。所以上面提到的前四种 IO 模型都是同步 IO,最后一种是异步 IO。 阻塞和非阻塞的区别在于第一步,发起 IO 请求是否会被阻塞,如果阻塞直到完成那么就是传统的阻塞 IO,否则就是非阻塞 IO。所以上面提到的第一种 IO 模型是阻塞 IO,其余的都是非阻塞 IO。 Java IO API 介绍完操作系统层面的 IO 模型,我们来看看,Java 提供的 IO 相关的 API。 Java 中提供三种 IO 操作的 API,阻塞 IO(BIO,同步阻塞),非阻塞 IO(NIO,同步非阻塞)和异步 IO (AIO

python之I/O操作

。_饼干妹妹 提交于 2020-01-15 18:24:27
IO在计算机中指Input/Output,也就是输入和输出。由于程序和运行时数据是在内存中驻留,由CPU这个超快的计算核心来执行,涉及到数据交换的地方,通常是磁盘、网络等,就需要IO接口。 比如你打开浏览器,访问新浪首页,浏览器这个程序就需要通过网络IO获取新浪的网页。浏览器首先会发送数据给新浪服务器,告诉它我想要首页的HTML,这个动作是往外发数据,叫Output,随后新浪服务器把网页发过来,这个动作是从外面接收数据,叫Input。所以,通常,程序完成IO操作会有Input和Output两个数据流。当然也有只用一个的情况,比如,从磁盘读取文件到内存,就只有Input操作,反过来,把数据写到磁盘文件里,就只是一个Output操作。 事件驱动模型 通常情况,有一下几种情况模型: 每收到一个请求,创建一个新的进程,来处理该请求。 每收到一个请求,创建一个新的线程,来处理该请求。 每收到一个请求,放入一个时间列表,让主进程通过非阻塞IO来处理请求。 综上普遍认为第三种方式为大多数网络服务器采用的方式。 例如在UI编程中,常常用到鼠标点击进行操作,那么如何,何时去获得鼠标的点击进行处理呢? 在前面学到的线程中,我们可以创建一个线程对鼠标进行检测。那么问题来了? CPU资源浪费,可能鼠标点击的频率非常小,但是扫描线程还是会一直循环检测,这会造成很多的CPU资源浪费

nginx与php-fpm通信的两种方式

社会主义新天地 提交于 2020-01-15 08:58:56
转载:http://blog.csdn.net/koastal/article/details/52303316 简述 在linux中,nginx服务器和php-fpm可以通过tcp socket和unix socket两种方式实现。 unix socket是一种终端,可以使同一台操作系统上的两个或多个进程进行数据通信。这种方式需要再nginx配置文件中填写php-fpm的pid文件位置,效率要比tcp socket高。 tcp socket的优点是可以跨服务器,当nginx和php-fpm不在同一台机器上时,只能使用这种方式。 windows系统只能使用tcp socket的通信方式 配置方法 tcp socket tcp socket通信方式,需要在nginx配置文件中填写php-fpm运行的ip地址和端口号。 location ~ \.php$ { include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;; fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; } unix socket unix socket通信方式,需要在nginx配置文件中填写php-fpm运行的pid文件地址。 location

loadrunner中实现windows socket协议进行压力测试

本小妞迷上赌 提交于 2020-01-15 08:49:07
loadrunner中的windows socket协议如果通过录制方式还是比较简单的,可以在data.ws中参数化一些值就可以了。但有些接口类的内容是没有办法进行录制的,只能通过手写函数实现。下面大概的说一下过程 vuser_init 部分:建立一个socket连接,要写到init里,这样在压力过程就相当于只建立一次。 #include "lrs.h" vuser_init() { lrs_create_socket("socket1","TCP","RemoteHost=111.111.111.218:12000",LrsLastArg); } action 部分:send是发送信息的函数,同时也具有取值的功能,这要看data.ws中的tcp/ip令命是什么。 //是调试时留下的一些代码,无具体用处 #include "lrs.h" Action() { //char *ActualBuffer; //int NumberOfBytes; lrs_send("socket1","buf0",LrsLastArg); lrs_send("socket1", "buf1", LrsLastArg); //lrs_set_receive_option(Mismatch, MISMATCH_CONTENT); //lrs_set_recv_timeout(0,0); //lrs_set

创建Socket接收Tcp数据,运行一两天左右就会停止运行

点点圈 提交于 2020-01-15 08:29:38
创建Socket接收Tcp数据,运行一两天左右就会停止运行 请大佬帮忙看一下 using Newtonsoft . Json ; using Newtonsoft . Json . Linq ; using System ; using System . Collections . Generic ; using System . Diagnostics ; using System . IO ; using System . Linq ; using System . Net ; using System . Net . Sockets ; using System . Runtime . InteropServices ; using System . Text ; using System . Text . RegularExpressions ; using System . Threading ; using System . Windows . Forms ; namespace TcpRecevice { public partial class Form1 : Form { # region 参数 private static string FTPCONSTR = "" ; //FTP的服务器地址。 private static string FTPUSERNAME