socket通信

C# socket通信随记回顾

旧巷老猫 提交于 2019-12-10 02:26:42
----tcp(传输 控制 协议)是可靠消息:三次握手(发给对方,对方发给自己,证明对方接到消息,在发给对方,说明自己能接到对方消息,这样就都知道了):tcp:每发送一次消息,对方都会回复,证明接受到了所以是可靠地;包含许多校验,效率差; ---(UDP:用户 数据报 协议)数据报文服务:消息发送给对方就完事了,不管你是否接收到; 不可靠,但是效率高; -----应用层协议:Http,Ftp,Popj SMTp -----传输层:TCP,ICMP,UDP -----网络层:IP,ARP ; socket是应用层和传输层之间的交互; ---端口:三类:工人端口、注册端口、动态私有端口(这些可以用) ---套接字指的是socket;封装的网络插口; ----服务端:1创建socket,绑定端口和ip;打开监听,接受客户端; ----客户端:创建socket,链接服务器,创建ip端口,进行链接; --服务器端接受科幻段消息时,创建socketProxy对象,占用系统自动分配的 一个端口,发送消息时重新占用新的端口,原来端口继续监听; --说白了,监听端口收到消息创建新的socket对象,并绑定新的端口进行通信 --这个端口就帮死了,传递接受都用这一个端口), 而监听端口继续监听, public partial class Form1 : Form { List<Socket> list

hbase之RPC详解

我只是一个虾纸丫 提交于 2019-12-09 15:13:21
Hbase的RPC主要由HBaseRPC、RpcEngine、HBaseClient、HBaseServer、VersionedProtocol 5个概念组成。 1、HBaseRPC是hbase RPC的实现类,核心方法:   1)、RpcEngine getProtocolEngine():返回RpcEngine对象   2)、<T extends VersionedProtocol> T waitForProxy():调用RpcEngine的getProxy()方法,返回一个远程代理对象,比如:第一次访问HRegionServer时需要执行该方法,设置代理后,会缓存该对象到HConnectionImplementation中。 2、RpcEngine接口 ,其实现类:WritableRpcEngine,核心方法:   1)、VersionedProtocol getProxy():返回代理对象,HRegionServer和HMaster均是VersionedProtocol的实现类,即返回的对象可代理执行HRegionServer和HMaster的方法;   2)、Object[] call():调用程序接口,最终是经过HBaseClient的内部类Connection通过socket方式完成;   3)、RpcServer getServer()

VisualVM分析与HelloWorld、springBoot项目

空扰寡人 提交于 2019-12-08 01:59:26
VisualVM分析与HelloWorld、springBoot项目 自从1995年第一个JDK版本JDKBeta发布,至今已经快25年,这些年来Java的框架日新月异,从最开始的Servlet阶段,到SSH,SSI,SSM,springboot等,还有一些其他方向的框架微服务SpringCloud、响应式编程Spring Reactor。零零总总 的框架,我们都需要去熟悉,那么怎么去快速熟悉呢,我觉得可以看源码,可以看博客,也可以根据内存分配去完善理解。 那么问题来了,一个Java项目在咱们平时启动项目的时候,究竟发生了什么,创建几个简单的项目,用VisualVM来分析一下~ Main 简单的项目,应该没有比HelloWorld更简单的了吧,按照老规矩,咱们就从HelloWorld开始分析!那么简单的项目大家都能闭着眼睛敲出来,是不是没分析的必要啊,别着急,写好HelloWorld咱们开始分析: System.out.println("HelloWorld start"); // 这里让线程睡一会,方便分析 Thread.sleep(100000); System.out.println("HelloWorld end"); 运行main方法,打开VisualVM,发现事情并不简单哦,这个简单的项目有十六个线程维护,其中守护线程有十五个。 其中几大线程的内存分配情况如下:

spring kafka 配置详解

假装没事ソ 提交于 2019-12-07 11:59:56
[b]spring kafka 配置详解[/b] 使用spring-integration-kafka发送消息 1.Outbound Channel Adapter用来发送消息到Kafka。 2.消息从Spring Integration Channel中发出,一旦配置好这个Channel,就可以利用这个Channel往Kafka发消息。(MessageChannel类)。 1.int:channel是配置Spring Integration Channel, 此channel基于queue。 2.int-kafka:outbound-channel-adapter是outbound-channel-adapter对象, 内部使用一个线程池处理消息。关键是kafka-producer-context-ref。 3.int-kafka:producer-context配置producer列表,要处理的topic,这些Producer最终要转换成Kafka的Producer。 4.task:executor任务队列的配置: [b]BROKER 的全局配置[/b] ------------------------------------------- 系统 相关 ------------------------------------------- #

RFID设备管理C#客户端学习笔记之3:用指令控制JT-8290A读写器

雨燕双飞 提交于 2019-12-07 01:28:14
本例中,JT-8290A读写器(其资料在 百度云分享 中CSharp>捷通开发包目录下)连接到本地路由器之后,可访问读写器的ip地址进行简单配置(类似路由器第一次设置),主要是将其“服务器地址”参数设置为实验的电脑ip地址即可(本机是服务器,读写器是客户,客户可以有多个。服务器和客户必须在同一个子网才可以通信)。 所以Socket通信代码在( http://my.oschina.net/SnifferApache/blog/406563 )基础上修改~~ 官方 文档 中有如下描述: 如果应用程序在执行期间只需要一个线程,请使用下面的方法,这些方法适用于同步操作模式。 如果当前使用的是面向连接的协议(如 TCP),则服务器可以使用 Listen 方法侦听连接。 Accept 方法处理任何传入的连接请求,并返回可用于与远程主机进行数据通信的 Socket。 可以使用此返回的 Socket 来调用 Send 或 Receive 方法。 如果要指定本地 IP 地址和端口号,请在调用 Listen 方法之前先调用 Bind 方法。 如果您希望基础服务提供程序为您分配可用端口,请使用端口号 0。 如果希望连接到侦听主机,请调用 Connect 方法。 若要进行数据通信,请调用 Send 或 Receive 方法。 如果当前使用的是无连接协议(如 UDP),则根本不需要侦听连接。 调用

Java BIO编程和伪异步I/O编程

别来无恙 提交于 2019-12-06 15:16:33
摘自《Netty权威指南》 BIO通信模型: 问题显而易见: 每个客户端都需要创建一个线程,并发访问量大时,系统会出现堆栈溢出、创建新线程失败等问题 代码演示 功能:时间服务器 服务端: 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788 public class { public static void (String[] args) throws IOException { int port = 8080; if (args != null && args.length > 0) { port = Integer.valueOf(args[0]); } ServerSocket server = null; try { server = new ServerSocket(port); System.out.println("The time server is start in port : " + port); Socket socket; while (true) { socket =

实验五 通讯协议设计

荒凉一梦 提交于 2019-12-06 06:46:15
实验五 通讯协议设计-1 一、任务详情 在Ubuntu中完成 http://www.cnblogs.com/rocedu/p/5087623.html 中的作业 提交运行结果截图 1.访问OpenSSL的官网https://www.openssl.org/source/,下载最新版本的OpenSSL: 2.使用tar xzvf openssl-1.1.0j.tar.gz命令解压文件 3.使用cd openssl-1.1.0j命令进入目录 4.然后使用下列命令编译安装: ./configure make sudo make install 5.使用make test测试一下有没有问题: 编写一个测试代码test_openssl.c #include <stdio.h> #include <openssl/evp.h> int main(){ OpenSSL_add_all_algorithms(); return 0; } 3.接下来用下面命令编译: gcc -o to test_openssl test_openssl.c -I /usr/local/ssl/lib -lcrypto -ldl -lpthread 4.执行echo $?   结果显示为0,表明测试已经通过,如下图: 实验五 通讯协议设计-2 1.任务详情 在Ubuntu中实现对实验二中的“wc服务器

[转]Nginx实现高并发的原理

旧城冷巷雨未停 提交于 2019-12-03 22:38:07
Nginx 首先要明白,Nginx 采用的是多进程(单线程) & 多路IO复用模型。使用了 I/O 多路复用技术的 Nginx,就成了”并发事件驱动“的服务器。 异步非阻塞(AIO)的详解 http://www.ibm.com/developerworks/cn/linux/l-async/ 多进程的工作模式 1、Nginx 在启动后,会有一个 master 进程和多个相互独立的 worker 进程。 2、接收来自外界的信号,向各worker进程发送信号,每个进程都有可能来处理这个连接。 3、 master 进程能监控 worker 进程的运行状态,当 worker 进程退出后(异常情况下),会自动启动新的 worker 进程。 注意 worker 进程数,一般会设置成机器 cpu 核数。因为更多的worker 数,只会导致进程相互竞争 cpu,从而带来不必要的上下文切换。 使用多进程模式,不仅能提高并发率,而且进程之间相互独立,一个 worker 进程挂了不会影响到其他 worker 进程。 惊群现象 主进程(master 进程)首先通过 socket() 来创建一个 sock 文件描述符用来监听,然后fork生成子进程(workers 进程),子进程将继承父进程的 sockfd(socket 文件描述符),之后子进程 accept() 后将创建已连接描述符(connected

android实现简单的聊天室

不问归期 提交于 2019-12-03 15:26:16
先说一下流程。首先是建立一个java工程,并创建两个java类,一个用于接收到客户端的连接,并把连接添加list中,第二类实现线程runnable接口,专门用来接收发送客户发送的信息。其次,建立android工程,并创建两个类,一个用于显示聊天界面,另一个负责接收服务器端返回的信息。这个例子肯定会有考虑不周的地方但是只是为了学习android中网络相关api的使用,所以请大家谨慎拍砖。 首先还是android的内容 [html] view plain copy print ? < RelativeLayout xmlns:android = "http://schemas.android.com/apk/res/android" xmlns:tools = "http://schemas.android.com/tools" android:layout_width = "match_parent" android:layout_height = "match_parent" > < EditText android:id = "@+id/et_show" android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:lines = "5" android:hint =

Linux 13网络服务器与客户端ser,cli

自古美人都是妖i 提交于 2019-12-03 12:25:29
1.网络编程 1.1基本概念 目的: 实现进程间的通信 网络: 把多个主机连接起来,构成一个网络, 互联网: 把网络和网络 连接起来就构成了互联网。 ip: 在网络中唯一标示一台主机 端口: 在某个主机上唯一标示一个进程。 1.2网络模型 2.tcp编程流程 3. tcp实现 3.1tcp ser.c #include<stdio.h> #include<stdlib.h> #include<unistd.h> #include<string.h> #include<assert.h> #include<sys/socket.h> #include<netinet/in.h> #include<arpa/inet.h> int main() { int sockfd=socket(AF_INET,SOCK_STREAM,0); assert(sockfd!=-1); struct sockaddr_in saddr,caddr; memset(&saddr,0,sizeof(saddr)); saddr.sin_family=AF_INET; saddr.sin_port=htons(6000); saddr.sin_addr.s_addr=inet_addr("127.0.0.1"); int res=bind(sockfd,(struct sockaddr*)&saddr