版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6974229.html 近期在做一个棋牌项目,需要用到socket传输protobuf字节流,在网上找了一些博客和文章后发现,没有特别全面的,所以把自己研究的全部源码拿出来和大家分享,因为刚开始做,可能会有不足的地方,欢迎拍砖~~ 这一篇主要是protocol buffer文件的序列化和解析,废话不多说了,直接上干货 /// <summary> /// 将消息序列化为二进制的方法…
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6977935.html 上一篇主要说的是protobuf字节流的序列化和解析,将protobuf对象序列化为字节流后虽然可以直接传递,但是实际在项目中却不可能真的只是传递protobuf字节流,因为socket的tcp通讯中会出现几个很常见的问题,就是粘包和少包.所谓粘包,简单点说就是socket会将多个较小的包合并到一起发送.因为tcp是面向连接的,发送端为了将多个发往接收端的包…
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7027659.html 上篇已经把socket的传输说的差不多了,这篇主要是说说断线重连,没什么好说的,直接上代码吧 //断线重连功能我是用的协程,不建议用线程去重连,因为大多数时候,重连是需要告诉用户的,使用线程会导致显示很麻烦 int reconnectTime = ;//重连次数 IEnumerator Reconnect() { //关闭socket,上一篇中有定义 Clo…
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/6986474.html 上一篇讲到了数据的处理,这一篇主要讲使用多线程收发消息 //创建消息数据模型 //正式项目中,消息的结构一般是消息长度+消息id+消息主体内容 public class Message { public IExtensible protobuf; public int messageId; } public class SocketClientTemp :…
首先来说一下本文中例子所要实现的功能: 基于ProtoBuf序列化对象 使用Socket实现时时通信 数据包的编码和解码 下面来看具体的步骤: 一.Unity中使用ProtoBuf 导入DLL到Unity中,创建网络传输的模型类: using System; using ProtoBuf; //添加特性,表示可以被ProtoBuf工具序列化 [ProtoContract] public class NetModel { //添加特性,表示该字段可以被序列化,1可以理解为下标 [ProtoMemb…
Socket的简单认识 Socket是一种面向连接的通信协议,Socket应用程序是一种C/S(Client端/Server端)结构的应用程序 Socket是两台机器间通信的端点. Socket是连接运行在网络上的两个程序间的双向通讯端点. Socket通信原理 Server服务端的输入流相当于Client客户端的输出流 Server服务端的输出流相当于Client客户端的输入流 注意 文件传输使用字节流(Steam) 使用DataOutputStream,DataOutputStream可以传…
使用socket传输组织好的不同类型数据,有四种不同的方式(我知道的嘿嘿): a. 结构体 b. Json序列化 c. 类对象 d. protobuf 下面逐一整理一下,方便以后进行项目开发. 1. 使用结构体 假设需要传送的结构体如下: struct person { char name[20]; // 注意:CPU访问内存的时候,对访问地址有对齐的要求,一般为2的幂次方.所以,有的数据被填充,以满足对齐要求. int age; float high; }; 可在发送数据的地方对数据进行处理,…
最近在做一个机器人项目,要实时的接收机器人传回的坐标信息,并在客户端显示当前的地图和机器人的位置.当然坐标的回传是用的Socket,用的是C++的结构体表示的坐标信息.但是C#不能像C++那样很easy的把字节数组byte[]直接的转换成结构,来发送和接收.在C#中要多做一些工作.但是在C或者C++中这是一件很容易的事,只需要一个函数: void *memcpy(void *dest, const void *src, size_t n);//从源src所指的内存地址的起始位置开始拷贝n个字节到…
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决了问题. 个人认为可能是传输过程中,接收端向磁盘写速度有点慢,被后面的覆盖导致错误. //---------------------------------------------------------------------------------------------------------…
1.写了一个socket传输文件的程序,发现传输过去文件有问题.找了一下午终于似乎找到了原因,记录下来警示一下: 接受文件的一端,向本地写文件之前使用Thread.sleep(time)休息一下就解决了问题. 个人认为可能是传输过程中,接收端向磁盘写速度有点慢,被后面的覆盖导致错误. //---------------------------------------------------------------------------------------------------------…
本文只是初步实现了一个简单的TCP自定协议,更为复杂的协议可以根据这种方式去扩展. TCP协议,通俗一点的讲,它是一种基于socket传输的由发送方和接收方事先协商好的一种消息包组成结构,主要由消息头和消息体组成. 众所周知,基于socket的信息交互有两个问题: 第一.接收方不能主动识别发送方发送的信息类型,例如A方(客户端)向B方(服务器)发送了一条信息:123,没有事先经过协议规定的话,B方不可能知道这条信息123到底是一个int型123还是一个string型123,甚至他根本就不知道这条…
轉自:http://blog.chinaunix.net/uid-9543173-id-3921143.html 利用OpenSSL库对Socket传输进行安全加密(RSA+AES) 1. 利用RSA安全传输AES生成密钥所需的Seed(32字节) 2. 利用AES_encrypt/AES_decrypt对Socket上面的业务数据进行AES加密/解密 理论上只需要AES就能保证全部流程,但由于AES加密所需要的AES-KEY是一个结构. 这个一个结构,如果通过网络进行传输,就需要对它进行网络编…
推荐资料 https://www.cnblogs.com/xiaokang01/p/9865724.html socket传输文件 思路: # 先将报头转换成字符串(json.dumps), 再将字符串的长度打包 # 发送报头长度,发送报头内容,最后放真是内容 # 报头内容包括文件名,文件信息,报头 # 接收时:先接收4个字节的报头长度, # 将报头长度解压,得到头部信息的大小,在接收头部信息, 反序列化(json.loads) # 最后接收真实文件 服务端 #!/usr/bin/env pyt…
采用socket传输文件 客户端输入文件的地址,服务端判断文件存在,就将文件传输到客户端 package com.fly.socket; import java.io.BufferedInputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException;…
前面介绍了HTTP协议的网络通信,包括接口调用.文件下载和文件上传,这些功能固然已经覆盖了常见的联网操作,可是HTTP协议拥有专门的通信规则,这些规则一方面有利于维持正常的数据交互,另一方面不可避免地缺少灵活性,比如下列条条框框就难以逾越:1.HTTP连接属于短连接,每次访问操作结束之后,客户端便会关闭本次连接.下次还想访问接口的话,就得重新建立连接,要是频繁发生数据交互的话,反复的连接和断开将造成大量的资源消耗.2.在HTTP连接中,服务端总是被动接收消息,无法主动向客户端推送消息.倘若客户端…
版权声明:本文为原创文章,转载请声明http://www.cnblogs.com/unityExplorer/p/7574569.html 这两天博主在接微信支付SDK的时候碰到一个非常恶心又诡异的问题——proto序列化和反序列化的无辜崩溃 上图就是博主遇到这个问题时正在调试微信支付的核心协议,博主在序列化和反序列化该消息的字节组时,unity就会立马崩溃,遇到过unity崩溃的朋友应该都知道,unity会给出两个用于查找问题的文件,一个crash.dmp和一个error.log error.…
一.Netty框架介绍 什么是netty?先看下百度百科的解释:         Netty是由JBOSS提供的一个java开源框架.Netty提供异步的.事件驱动的网络应用程序框架和工具,用以快速开发高性能.高可靠性的网络服务器和客户端程序. 也就是说,Netty 是一个基于NIO的客户.服务器端编程框架,使用Netty 可以确保你快速和简单的开发出一个网络应用,例如实现了某种协议的客户,服务端应用.Netty相当简化和流线化了网络应用的编程开发过程,例如,TCP和UDP的socket服务开发…
服务器端的整体思路: 1.初始化IP地址和端口号以及套接字等字段: 2.绑定IP启动服务器,开始监听消息  socketServer.Listen(10): 3.开启一个后台线程接受客户端的连接 socketServer.Accept(),这里需要注意的是服务器端有两个Socket,一个负责监听,另一个负责传输消息,分工明确: 4.接受客户端消息  socketMsg.Receive(): 5.向客户端发送消息 Send(bySendArray): 6.当然还应该包括信息显示方法和系统的退出方法…
一.简单的socket程序——传输简短文字: # -*- coding: utf-8 -*- # -*- Author: WangHW -*- import socket whw_client = socket.socket(socket.AF_INET,socket.SOCK_STREAM) whw_client.connect(('127.0.0.1',9001)) while 1: cmd = input('>>>:').strip() if not cmd: continue w…
发送端可以不停的发送新文件,接收端可以不停的接收新文件. 例如:发送端输入:e:\visio.rar,接收端会默认保存为 e:\new_visio.rar,支持多并发,具体实现如下: 接收端: 方法一: #-*- coding: UTF-8 -*- import socket,time,SocketServer,struct,os,thread host='192.168.50.74' port=12307 s=socket.socket(socket.AF_INET,socket.SOCK_S…
拥抱swoole, 拥抱更好的php Swoole 是什么? Yaf 是什么? 接触swoole已经4年多了,一直没有好好静下心来学习.一直在做web端的应用,对网络协议和常驻内存型服务器一窍不通.一不留神swoole已经从小众扩展变成了流行框架,再不学习就完了 swoole + yaf swoole server 的角色 还是先用swoole来做一个http server. 常见的php web应用,通常是apache+fast-cgi 或者 nginx + php-fpm.这里以php-fp…
下载 Client using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Net; using System.Net.Sockets; using System.Threading; using System.IO; using System.Windows.Forms; namespace S…
今天做了一下测试,目的是看看局域网内服务器a,通过一个连接往服务器b传输数据,和通过多个连接传输的不同. 结果发现和多少个连接没关系,一个进程一个连接就能跑满网卡,只要write的时候够快,read的时候够快就可以.1000m网卡,tcp能跑到910m,得出的结论就是,如果单个流数据很稀少,比如命令类的流,最好集群中采用一个连接,因为他本可以支撑好多连接,连接多了也会站系统资源.如果单个流传输的比较大,瓶颈基本在带宽和cpu上,就无所谓了 不同的业务架构不同,不要想着一种架构可以搞定,比如直播,…
1.基础类TransferFiles,client和server都需要 using System; using System.Collections.Generic; using System.Text; using System.Net; using System.Net.Sockets; using System.Windows.Forms; namespace Server { public class TransferFiles { public static int SendData(…
1. 首先导入头文件 #include <stdio.h> #include <errno.h> #include <string.h> #include <unistd.h> #include <netdb.h> #include <sys/socket.h> #include <netinet/in.h> #include <sys/types.h> #include <arpa/inet.h>…
在java中,可以通过socket将一个对象进行传递,通过ObjectOutputStream,ObjectInputStream来进行写入和读取(具体的方法参考http://blog.csdn.net/zyujie/article/details/8243742),但在传递时需要注意以下两点: 1.传递的对象必须实现Serializable标记接口,实现对象的可序列化.如public class Employee implements Serializable 2.发送和接收的对象包名应该保持…
data结构体类型 public struct datas    { public string test1; public string test2;    } //socket服务器端 public void SocketServer()        {            Socket listener = new Socket(AddressFamily.InterNetwork,                                         SocketType.…
环境:Linux 语言:C++ 通信方式:TCP 下面用TCP协议编写一个简单的服务器.客户端,其中服务器端一直监听本机的6666号端口.如果收到连接请求,将接收请求并接收客户端发来的消息:客户端与服务器端建立连接.连接建立成功后,读取文件内容(/root/workspace/socket-picture/bizhi.jpg),发送给服务器端,服务器端新建new1.jpg文件,将接收到的文件内容保存到new1.jpg中,new1.jpg在当前目录下: Server.cpp #include<st…
研究了一下PHP和C++socket通讯,用C++作为服务器端,php作为客户端进行. socket通讯是基于协议的,因此,只要双方协议一致就行. 关于协议的选择:我看过网上大部分协议都是在应用层的协议,选用这样的协议很方便,基本上就是字符串传过来,传过去 本次研究的协议算是当今国际化的一个标准做法.length+flag+body(长度+类型+内容)的方式, total_length code flag length1 string1 length2 string2 总长度 操作类型 标志 字…
server public class Server{ private static int port = 8888; private static ServerSocket serverSocket; private static Socket socket; public static void main(String args[]) throws IOException { serverSocket = new ServerSocket(port, 2); socket = serverS…