GVKun编程网logo

java socket InputStream和OutputStream

1

在本文中,我们将为您详细介绍javasocketInputStream和OutputStream的相关知识,此外,我们还会提供一些关于Apache+Symfony2+HTTPS+Node.js+Soc

在本文中,我们将为您详细介绍java socket InputStream和OutputStream的相关知识,此外,我们还会提供一些关于Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Flash Socket 和 Erlang Socket 通信的注意事项、GET http:// localhost:3000 / socket.io / socket.io.js 404(未找到)、HP-Socket v2.1.1 发布,通用高性能 Windows Socket 组件的有用信息。

本文目录一览:

java socket InputStream和OutputStream

java socket InputStream和OutputStream

从java socket对象获取的InputSteam的read方法其实是对linux的recv()函数的调用,OutputStream也同理。

也就是说,InputStream和OutputStream只是对底层接口的一个包装。

 

recv()和send()来自于<sys/socket.h>,这是glibc的头文件。函数原型如下:

ssize_t recv(int sockfd, void *buff, size_t nbytes, int flags);

ssize_t send(int sockfd, const void *buff, size_t nbytes, int flags);

可见,给定要传输的数据的起始地址以及要传输的数据的长度,就可以进行传输了。

而OutputStream的write方法,

java.io.OutputStream.write(byte[] b, int off, int len)

同样,给定要传输的数据的起始地址以及要传输的数据的长度。

 

Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发

Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发

我一直在这个问题上花费数小时,但无济于事。

编辑:find解决scheme(请参阅我的答案)

项目背景

我正在Symfony2构build一个项目,这个项目需要一个上传大文件的模块。 我select了Node.js和Socket.IO (我必须从头学习,所以我可能会缺less一些基本的东西)。 我将它们与HTML5 File和FileReader API结合起来,将切片中的文件从客户端发送到服务器。 初步testing表明,这种方法作为一个独立的应用程序运行良好,一切都由Node.js处理和服务,但与Apache和Symfony2集成似乎有问题。

该应用程序有一个不安全和安全的部分。 我的目标是在端口80和443上使用Apache来为Symfony2构build的应用程序提供大量服务,在端口8080上使用带有Socket.io Node.js来上传文件。 连接到套接字的客户端页面将由Apache ,但套接字将通过Node.js运行。 上传模块必须通过HTTPS运行,因为页面驻留在具有经过身份validation的用户的安全环境中。

问题是事件使用socket.emit或socket.send似乎没有工作。 客户端到服务器,或服务器到客户端,它没有任何区别。 没有任何反应 ,也没有错误。

使用Apache POI的sxssfSheet从xlsx读取数据

该网站负载很重+ ROR

JSON对象的最大大小?

PHP如何与Apache接口?

Apache的子域名代理jenkins在tomcat插入额外的目录

代码

显示的代码是我的代码的简化版本,没有混乱和敏感的数据。

服务器

var httpsModule = require('https'),fs = require('fs'),io = require('socket.io'); var httpsOptions = { key: fs.readFileSync('path/to/key'),cert: fs.readFileSync('/path/to/cert'),passphrase: "1234lol" } var httpsServer = httpsModule.createServer(httpsOptions); var ioServer = io.listen(httpsServer); httpsServer.listen(8080); ioServer.sockets.on('connection',function(socket) { // This event gets bound,but never fires socket.on('NewFile',function(data) { // To make sure something is happening console.log(data); // Process the new file... }); // Oddly,this one does fire socket.on('disconnect',function() { console.log("disconnected"); }); });

客户

// This is a Twig template,so I'll give an excerpt {% block javascripts %} {{ parent() }} <script type="text/javascript" src="https://my.server:8080/socket.io/socket.io.js"></script> <script type="text/javascript"> var socket = io.connect("my.server:8080",{ secure: true,port: 8080 }); // Imagine this is the function initiating the file upload // File is an object containing Metadata about the file like,filename,size,etc. function uploadNewFile(file) { socket.emit("NewFile",item); } </script> {% endblock %}

所以问题是…

当然,还有更多的应用程序比这个,但这是我卡住的地方。 页面加载完美没有错误,但排放事件永远不会触发或到达服务器(断开事件除外)。 我已经尝试了客户端和服务器上的消息事件,以检查是否只有自定义事件的问题,但也没有工作。 我猜测什么是阻止客户端 – 服务器通信(这不是防火墙,我已经检查)。

我完全不知所措,请帮忙。

编辑:find解决scheme(请参阅我的答案)

通过一个脚本在apache下所有的path服务

Apache SetEnv预装了REDIRECT_。 是什么赋予了?

Linux未find包含非ASCII字符的文件名的错误

PHP直接打印到打印机(本地/networking)(卡在打印后台处理程序中)

NodeJS应该是独立的(没有Apache Nginx的IE)

经过一番苦心的调试,我发现我的设置有问题。 不妨分享我的发现,虽然他们(我认为)与Node.js,Socket.IO或Apache无关。

正如我所提到的,我的问题已经简化了代码,向您展示我的设置没有混乱。 不过,我通过一个对象来设置客户端,使用属性来配置套接字连接。 像这样:

var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(location,port: 8080,query: "token=blabla" }),// ...lots of extra properties and methods }

问题在于使用location作为属性名称。 这是Javascript中的一个保留字,在这种情况下会造成一些奇怪的行为。 我发现奇怪的是,一个对象的属性名称不能是保留字,所以我决定测试。 我也注意到我正在引用属性不正确,我忘记连接到套接字时使用this.location 。 所以我把它改成了这个,只是作为一个测试。

var MyProject = {}; MyProject.Uploader = { location: 'my.server:8080',socket: io.connect(this.location,// ...lots of extra properties and methods }

但无济于事。 我仍然没有通过套接字获取数据。 所以下一步似乎是合乎逻辑的,这是我受挫的调试风暴。 改变属性名称固定一切!

var MyProject = {}; MyProject.Uploader = { socketLocation: 'my.server:8080',socket: io.connect(this.socketLocation,// ...lots of extra properties and methods }

这种方法完美运行,我得到了大量的调试消息。 成功!! 不管是Javascript中的预期行为,还是重写(或者这里发生的任何事情,“滥用”,现在都觉得是一种更好的方式)对象属性,如果你碰巧使用了保留字,我不知道。 我只知道我从现在开始避开他们!

希望它能帮助那里的任何人!

Flash Socket 和 Erlang Socket 通信的注意事项

Flash Socket 和 Erlang Socket 通信的注意事项

原文来自:http://www.iteye.com/topic/401041

 

学erlang有一段时间了,现在在维护一套webim系统
并打算扩展成 webgame 的服务程序

在没有使用包协议的时候,遇到好多粘包问题,实在恼火

查阅了相关资料:

Flash Socket 的 writeUTF() 会自动增加包头长度的协议,刚好对应了
Erlang的Socket选项 {packet,2}

这使得两者的通信非常完美,再也不用担心粘包什么的问题了

 

下面是我写的一个Flash Socket 接口:SocketBridge.as

 

Js代码

复制代码

 

  1. package {  
  2.     import flash.display.Sprite;  
  3.     import flash.events.*;  
  4.     import flash.net.socket;  
  5.     import flash.utils.*;  
  6.     import flash.external.ExternalInterface;  
  7.     import flash.system.*;  
  8.     public class SocketBridge extends Sprite {  
  9.         Socket.prototype.timeout    =3000;  
  10.         private var socket:Socket;  
  11.         public function SocketBridge()  
  12.         {  
  13.             socket = new Socket();  
  14.             socket.addEventListener( Event.CONNECT, onConnect );  
  15.             socket.addEventListener( ProgressEvent.soCKET_DATA, onDataRecevice);  
  16.             socket.addEventListener( Event.CLOSE, onClose);  
  17.             socket.addEventListener( IOErrorEvent.IO_ERROR, onError);   
  18.               
  19.             if(ExternalInterface.available)  
  20.             {  
  21.                   
  22.                 ExternalInterface.addCallback("socket_connect",socket_connect);  
  23.                 ExternalInterface.addCallback("socket_send",socket_send);  
  24.                 ExternalInterface.addCallback("load_policy",load_policy);  
  25.             }  
  26.         }  
  27.         public function onError(e):void  
  28.         {  
  29.             ExternalInterface.call("sb_onerror",e.text);  
  30.             socket.close();  
  31.         }  
  32.         public function load_policy(host:String,port):void  
  33.         {  
  34.             Security.loadPolicyFile("xmlsocket://"+host+":"+port);    
  35.         }  
  36.           
  37.         public function socket_connect(host:String,port):void  
  38.         {  
  39.             try{  
  40.                 socket.connect(host,port);  
  41.             }catch(e){  
  42.                 ExternalInterface.call("sb_onerror",e.text);  
  43.             }  
  44.         }  
  45.           
  46.         public function socket_send(msg:String)  
  47.         {     
  48.             socket.writeUTF(msg);  
  49.             socket.flush();  
  50.         }  
  51.           
  52.         private function onConnect(event:Event):void   
  53.         {  
  54.             ExternalInterface.call("sb_onconnect",true);  
  55.         }  
  56.           
  57.         private function onClose(event:Event):void   
  58.         {  
  59.             socket.close();  
  60.             ExternalInterface.call("sb_onclose",true);  
  61.         }  
  62.   
  63.         private function onDataRecevice( eventrogressEvent ):void  
  64.         {  
  65.             var sdata:String;  
  66.             while(socket.bytesAvailable){  
  67.                 sdata = socket.readUTF();  
  68.                 ExternalInterface.call("sb_ondata",sdata);  
  69.             }  
  70.         }  
  71.   
  72.     }  
  73. }  

GET http:// localhost:3000 / socket.io / socket.io.js 404(未找到)

GET http:// localhost:3000 / socket.io / socket.io.js 404(未找到)

我正在尝试将数据流式传输到浏览器。但是,我正在努力将其连接到浏览器。这是我的html:

<ul></ul><script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script><script src="/socket.io/socket.io.js"></script><script>    var socket = io.connect();    jQuery(function ($) {        var tweetList = $(''ul.tweets'');        socket.on(''tweet'', function (data) {            tweetList .prepend(''<li>'' + data.user + '': '' + data.text + ''</li>'');         });     });</script>

这是我的app.js的相关部分:

var express = require(''express'')    , twitter = require(''ntwitter'')  , http = require(''http'')  , path = require(''path'');var app = express();var io = require(''socket.io'').listen(app);app.get(''/'', function (req, res) { res.sendfile(__dirname + ''/index.html''); });app.listen(app.get(''port''), function(){   console.log("Express server listening on port " + app.get(''port''));});io.sockets.volatile.emit(''tweets'', {            user: data.user.screen_name,            text: data.text,            geo : geo,            latitude: latitude,            longitude: longitude                });

我通过packages.json文件安装了socket.io 0.9.16:

"dependencies": {    "express": "3.2.6",    "jade": "*",    "ntwitter":"0.2.10",    "socket.io":"0.9.x"  }

有谁可以帮我离开这里吗?为什么找不到文件?

深入挖掘。为了测试套接字,我将其放在app.js中:

var socket = io.listen(app);

我得到错误:

TypeError: Object #<Manager> has no method ''listen''    at Object.<anonymous> (/home/andy/dev/node/mytwittermap/app.js:49:17)    at Module._compile (module.js:456:26)    at Object.Module._extensions..js (module.js:474:10)    at Module.load (module.js:356:32)    at Function.Module._load (module.js:312:12)    at Function.Module.runMain (module.js:497:10)    at startup (node.js:119:16)    at node.js:901:3

答案1

小编典典

你可以尝试一下:

var http = require(''http'');var app = express();var server = http.createServer(app);var io = require(''socket.io'').listen(server);

我想,您将不得不实例化socket.io服务器。

HP-Socket v2.1.1 发布,通用高性能 Windows Socket 组件

HP-Socket v2.1.1 发布,通用高性能 Windows Socket 组件

以前为某大型通信项目开发了一套通用 Windows Socket TCP 底层通信组件,组件代号为 HP-Socket。现在把 HP-Socket 的所有代码向大众公开,希望能对大家有所帮助;另外,为了让大家能更方便的学习 HP-Socket,因此精心制作了一个功能测试示例(Test Echo)和一个性能测试示例(Test Echo-PFM),大家可以通过这两个测试示例入手,迅速掌握组件的设计思想和使用方法。HP-Socket 包含服务端组件(IOCP 模型)和客户端组件(Event Select 模型),具备以下重要特点:

通用性

  • 通信组件的唯一职责就是接受和发送字节流,绝对不能参与上层协议解析等工作;
  • 与上层使用者解耦、互不依赖,组件与使用者通过操作接口和监听器接口进行交互,组件实现操作接口为上层提供操作方法;使用者实现监听器接口把自己注册为组件的 Listener,接收组件通知。因此,任何使用者只要实现了监听器接口都可以使用组件;另一方面,甚至可以自己重新写一个实现方式完全不同的组件实现给使用者调用,只要该组件遵从组件的操作接口,这也是 DIP 设计原则的体现。

可用性

  • 可用性对所有通用组件都是至关重要的,如果太难用还不如自己重头写一个来得方便。因此,组件的操作接口和监听器接口设计得尽量简单易用(通俗来说就是“傻瓜化”),这两个接口的主要方法均不超过 5 个。另外,组件完全封装了所有的底层 Socket 通信,上层应用看不到任何通信细节,不必也不能干预任何通信操作,Socket 连接被抽象为 Connection ID,该参数作为连接标识提供给上层应用识别不同的连接。

高性能

  • 作为底层的通用组件,性能问题是必须考虑的,绝对不能成为系统的瓶颈。而另一方面,从实际出发,根据客户端组件与服务端组件的性能要求采用不同的 Socket 模型。组件在设计上充分考虑了性能、现实使用情景、可用性和实现复杂性等因素,确保满足性能要求的同时又不会写得太复杂。做出以下两点设计决策:
  • 客户端:在单独线程中实现 Socket 通信交互。这样可以避免与主线程或其他线程相互干扰;I/O 模型选择 Event Select 通信模型。
  • 服务端:采用 Windows 平台效率最高的 IOCP 通信模型;利用缓存池技术,在通信的过程中,通常需要频繁的申请和释放内存缓冲区,建立了动态缓存池, 只有当缓存池中没有可用对象时才创建新对象,而当缓存对象过多时则会压缩缓存池;另外,组件的动态内存通过私有堆(Private Heap)机制分配,避免与 new / malloc 竞争同时又减少内存空洞。

伸缩性

  • 可以根据实际的使用环境要求设置组件的各项性能参数(如:工作线程的数量、各种缓存池的大小、收发缓冲区的大小、Socket 监听队列的大小、Accep 派发的数目以及心跳检查的间隔等)。

     组件详细说明:http://www.cnblogs.com/ldcsaa/archive/2013/04/15/3022178.html

=============================================
v2.1.1 更新:
=============================================
> Server:
-----------------
1、IServerSocketListener 取消 OnPrepareSocket(connID, socket) 通知方法
2、IServerSocketListener 修改 OnAccept((connID, soClient) 通知方法,增加参数‘soClient’,用于实现原 OnPrepareSocket(connID, socket) 通知方法的功能
3、IServerSocketListener 增加 OnPrepareListen(soListen) 通知方法,用于设置监听 socket 的 SOCKET 选项
4、ISocketServer 增加方法 GetListenAddress(strAddress, usPort),用于获取监听 Socket 的地址信息
5、ISocketServer 增加方法 GetClientAddress(connID, strAddress, usPort),用于某个客户端连接的地址信息
6、优化 Socket 缓存池和内存块缓存池管理
7、调整一些属性访问方法的方法名
8、修复BUG:特殊情形下可能出现死锁现象

> Client:
-----------------
1、ISocketServer 增加方法 GetLocalAddress(strAddress, usPort),用于获取 Client Socket 的地址信息
2、优化数据发送方式,提升数据发送效率

> 其他更新:
-----------------
1、优化 TestEcho 和 TestEcho-PFM 测试程序
3、在 SocketHelper.h (.cpp) 中添加若干帮助函数
4、为 SocketHelper.h 中定义的所有接口、类和方法加入注释

关于java socket InputStream和OutputStream的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于Apache + Symfony2 + HTTPS + Node.js + Socket.io:socket.emit不会触发、Flash Socket 和 Erlang Socket 通信的注意事项、GET http:// localhost:3000 / socket.io / socket.io.js 404(未找到)、HP-Socket v2.1.1 发布,通用高性能 Windows Socket 组件等相关内容,可以在本站寻找。

本文标签: