SocketClient

Java Scoket编程

倾然丶 夕夏残阳落幕 提交于 2020-12-23 19:56:53
Java Scoket编程 转自http://www.cnblogs.com/futao123/p/5068632.html 爱海滔滔 一,网络编程中两个主要的问题 一个是如何准确的定位网络上一台或多台主机,另一个就是找到主机后如何可靠高效的进行数据传输。 在TCP/IP协议中IP层主要负责网络主机的定位,数据传输的路由,由IP地址可以唯一地确定Internet上的一台主机。 而TCP层则提供面向应用的可靠(tcp)的或非可靠(UDP)的数据传输机制,这是网络编程的主要对象,一般不需要关心IP层是如何处理数据的。 目前较为流行的网络编程模型是客户机/服务器(C/S)结构。 即通信双方一方作为服务器等待客户提出请求并予以响应。客户则在需要服务时向服务器提 出申请。服务器一般作为守护进程始终运行,监听网络端口,一旦有客 户请求,就会启动一个服务进程来响应该客户,同时自己继续监听服务端口,使后来的客户也 能及时得到服务。 二,两类传输协议: TCP 和 UDP   TCP 是 Tranfer Control Protocol 的 简 称,是一种面向连接的保证可靠传输的协议。通过TCP协议传输,得到的是一个顺序的无差错的数据流。发送方和接收方的成对的两个socket之间必须 建 立连接,以便在TCP协议的基础上进行通信,当一个socket(通常都是server socket)等待建立连接时

Java网络通信

主宰稳场 提交于 2020-12-23 19:36:28
连上前面的 + 新的 Java网络通信 socket/TCP/UDP Socket,又称为套接字,Socket是计算机网络通信的基本的技术之一 Open-Read-Write-Close:当一个用户进程进行IO操作之前,它需要调用Open来指定并获取待操作文件或设备读取或写入的权限。一旦IO操作对象被打开,那么这个用户进程可以对这个对象进行一次或多次的读取或写入操作。Read操作用来从IO操作对象读取数据,并将数据传递给用户进程。Write操作用来将用户进程中的数据传递(写入)到IO操作对象。 当所有的Read和Write操作结束之后,用户进程需要调用Close来通知系统其完成对IO对象的使用。 流通信 流通信协议,也叫做TCP( TCP / IP )( 通常用于互联网协议 )(多媒体技术)。是一种基于连接的协议。在使用流通信之前,我们必须在通信的一对儿socket之间建立连接。其中一个socket作为服务器进行监听连接请求。另一个则作为客户端进行连接请求。一旦两个socket建立好了连接,他们可以单向或双向进行数据传输。【像打电话 总得等对方接上了之后才能说话】 数据报通信 数据报通信协议,就是我们常说的UDP。UDP是一种无连接的协议,(这就意味着我们每次发送数据报时,需要同时发送本机的socket描述符和接收端的socket描述符。因此,我们在每次通信时都需要发送额外的数据。

网络编程

你离开我真会死。 提交于 2020-12-16 12:55:48
阅读目录 一.楔子 二.客户端/服务端架构 三.网络基础 四.套接字(socket)初使用 五.黏包 六.验证客户端链接的合法性 七.socketserver 回到顶部 一.楔子 你现在已经学会了写python代码,假如你写了两个python文件a.py和b.py,分别去运行,你就会发现,这两个python的文件分别运行的很好。但是如果这两个程序之间想要传递一个数据,你要怎么做呢? 这个问题以你现在的知识就可以解决了,我们可以创建一个文件,把a.py想要传递的内容写到文件中,然后b.py从这个文件中读取内容就可以了。 但是当你的a.py和b.py分别在不同电脑上的时候,你要怎么办呢? 类似的机制有计算机网盘,qq等等。我们可以在我们的电脑上和别人聊天,可以在自己的电脑上向网盘中上传、下载内容。这些都是两个程序在通信。 回到顶部 二.软件开发的架构 我们了解的涉及到两个程序之间通讯的应用大致可以分为两种: 第一种是应用类:qq、微信、网盘、优酷这一类是属于需要安装的桌面应用 第二种是web类:比如百度、知乎、博客园等使用浏览器访问就可以直接使用的应用 这些应用的本质其实都是两个程序之间的通讯。而这两个分类又对应了两个软件开发的架构~ 1.C/S架构 C/S即:Client与Server ,中文意思:客户端与服务器端架构,这种架构也是从用户层面(也可以是物理层面)来划分的。

C# .NET Socket 简单实用框架

大憨熊 提交于 2020-08-18 08:31:50
背景: 首先向各位前辈,大哥哥小姐姐问一声好~ 这是我第一次写博客,目前为一个即将步入大四的学生,上学期在一家公司实习了半年,后期发现没有动力,而且由于薪水问题(废话嘛),于是跳槽到这家新的公司。 说到Socket,想必大家都或多或少有所涉及,从最初的计算机网络课程,讲述了tcp协议,而Socket就是对协议的进一步封装,使我们开发人员能够更加容易轻松的进行软件之间的通信。 这个星期刚好接受一个共享车位锁的项目,需要使用Socket与硬件进行通信控制,说白了也就是给锁发送指令,控制其打开或者关闭,再就是对App开放操作接口,使其方便测试以及用户的使用。这其中核心就是Socket的使用,再开发出这个功能之后,我发现使用起来很不方便,于是耗时2天抽象其核心功能并封装成框架,最后使用这个框架将原来的项目重构并上线,极大的提高了软件的可拓展性,健壮性,容错率。 个人坚信的原则: 万物皆对象 好了,不废话了,下面进入正文 正文: 1、首先简单讲下C#中Socket的简单使用。 第一步:服务端监听某个端口 第二步:客户端向服务端地址和端口发起Socket连接请求 第三步:服务端收到连接请求后创建Socket连接,并维护这个连接队列。 第四步:客户端和服务端已经建立双工通信(即双向通信),客户端和服务端可以轻松方便的给彼此发送信息。 至于简单使用的具体实现代码全部被我封装到项目中了

c#Socket Tcp服务端编程

老子叫甜甜 提交于 2020-08-16 17:52:29
转自 https://www.cnblogs.com/kellen451/p/7127670.html 1 /* 2 * 3 * 该类用于管理tcp连接通讯 4 * 5 */ 6 7 using System; 8 using System.Collections.Generic; 9 using System.Net.Sockets; 10 using System.Threading; 11 using System.Net; 12 13 namespace Communication 14 { 15 /// <summary> 16 /// 服务端 17 /// </summary> 18 public class MyTcpServer 19 { 20 21 private Socket ServerSocket = null ; // 服务端 22 public Dictionary< string , MySession> dic_ClientSocket = new Dictionary< string , MySession>(); // tcp客户端字典 23 private Dictionary< string , Thread> dic_ClientThread = new Dictionary< string , Thread>(); // 线程字典

Java读源码之Netty深入剖析学习(一)

五迷三道 提交于 2020-08-15 04:16:12
Dubbo、Rocket MQ底层都是用了Netty应用框架 服务端: public class ServerBoot { private static final int PORT = 8000; public static void main(String[] args) { Server server = new Server(PORT); server.start(); } } public class Server { private ServerSocket serverSocket; public Server(int port) { try { this.serverSocket = new ServerSocket(port);//相当于服务器启动了,并且监听了端口号port System.out.println("服务端启动成功,端口:" + port); } catch (IOException exception) { System.out.println("服务端启动失败"); } } public void start() { new Thread(new Runnable() { @Override public void run() { doStart(); } }).start(); } private void doStart() { while

C#实现局域网聊天 通讯 Socket TCP 多人

老子叫甜甜 提交于 2020-08-10 06:39:25
程序分别为服务端与客户端,服务端创建套接字使用多线程侦听多客户端请求 代码需要引用System.Net;和System.Net.Socket;这两个类 分享源码demo:https://pan.baidu.com/s/10RuE9Vk0cIoxY91uzx4Gig 提取码:4eds 运行图: 服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleServer 7 { 8 class Program 9 { 10 static void Main( string [] args) 11 { 12 ServerControl Server = new ServerControl(); // 初始化Socket 13 Server.Start(); // 启动侦听连接 14 // Console.WriteLine("123"); 15 Console.Read(); 16 } 17 } 18 } 展开查看代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5

C#实现局域网聊天 通讯 Socket TCP 多人

老子叫甜甜 提交于 2020-08-09 18:04:56
程序分别为服务端与客户端,服务端创建套接字使用多线程侦听多客户端请求 代码需要引用System.Net;和System.Net.Socket;这两个类 分享源码demo:https://pan.baidu.com/s/10RuE9Vk0cIoxY91uzx4Gig 提取码:4eds 运行图: 服务端 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 6 namespace ConsoleServer 7 { 8 class Program 9 { 10 static void Main( string [] args) 11 { 12 ServerControl Server = new ServerControl(); // 初始化Socket 13 Server.Start(); // 启动侦听连接 14 // Console.WriteLine("123"); 15 Console.Read(); 16 } 17 } 18 } 展开查看代码 1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5

Java高并发教程:Reactor反应器模式

☆樱花仙子☆ 提交于 2020-08-08 19:21:36
Java高并发教程:Reactor反应器模式 Reactor反应器模式   到目前为止, 高性能网络编程都绕不开反应器模式 。很多著名的服务器软件或者中间件都是基于反应器模式实现的,如Nginx、Redis、Netty。   反应器模式是 高性能网络编程的必知、必会的模式 。 Reactor简介   反应器模式 由Reactor反应器线程 、 Handlers处理器 两大角色组成:   (1)Reactor反应器线程的职责: 负责响应IO事件,并且分发到Handlers处理器 。   (2)Handlers处理器的职责: 非阻塞 的执行业务处理逻辑。   从上面的反应器模式定义,看不出这种模式有什么神奇的地方。当然,从简单到复杂,反应器模式也有很多版本。根据前面的定义,仅仅是最为简单的一个版本。 多线程OIO的致命缺陷   在Java的OIO编程中,最初和最原始的网络服务器程序,是用一个while循环,不断地监听端口是否有新的连接。如果有,就调用一个和处理函数来完成,示例代码如下: @Test public void client() throws IOException { Socket client = new Socket("127.0.0.1", 9999); Writer writer = new OutputStreamWriter(client

IO积累01

家住魔仙堡 提交于 2020-07-29 00:46:47
mysql更新数据需要redo log,然后把数据保存到内存,有系统调用flus保存到磁盘中,是因为系统IO的原因,系统会把数据放到pagecacache中,如果对数据修改会标记为脏,这个标记是对所有的pagecache的,不是单指一个,然后有系统统一的flus到磁盘中;这就是为什么数据库修改数据保存到redo log中有延迟不是直接写入到磁盘中的原因。 说的不准确,知道大概过程 Linux有一个虚拟文件目录,都会挂载到相应的地方,比如dev3这块磁盘挂载到book虚拟目录上,进入book目录,其实就是进入到dev3中,所以就可以扩容,比如要存10T文件存入某个目录,可以把一个磁盘挂载到这个目录上,就可以保存了。 Linux虚拟文件系统,可以创建一个xxx.img文件,然后挂载到虚拟目录上,然后把可执行程序保存到虚拟目录中,实际操作的就是被挂载的xxx.img这块控件,可执行程序的根目录就是xxx.img,然后卸载xxx.img,把xxx.img挂载到其他虚拟目录也一样可以执行里面的程序,相当于一个容器,docket使用类似的原理; 磁盘IO pagecache作用 :内存中运行着各种应用,包括操作系统(kernel),但是应用不是一次性加载到内存中的,内存是分页存储的,每页大小4K,应用从磁盘加载到内存都是一页一页加载的,每个应用都有一个页表,里面记录页的线性地址