Socket 数据通信

原创 2016年06月01日 10:16:14
  public static class SocketTest
    {
        private static Encoding encode = Encoding.Default;
        /// <summary>
        /// 监听请求
        /// </summary>
        /// <param name="port"></param>
        public static void Listen(int port)
        {
            Socket listenSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            listenSocket.Bind(new IPEndPoint(IPAddress.Any, port));
            listenSocket.Listen(100);
            Console.WriteLine("Listen " + port + " ...");
            while (true)
            {
                Socket acceptSocket = listenSocket.Accept();
                string receiveData = Receive(acceptSocket, 5000); //5 seconds timeout.
                Console.WriteLine("Receive:" + receiveData);
                acceptSocket.Send(encode.GetBytes("ok"));
                DestroySocket(acceptSocket); //import
            }
        }
        /// <summary>
        /// 发送数据
        /// </summary>
        /// <param name="host"></param>
        /// <param name="port"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public static string Send(string host, int port, string data)
        {
            string result = string.Empty;
            Socket clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            clientSocket.Connect(host, port);
            clientSocket.Send(encode.GetBytes(data));
            Console.WriteLine("Send:" + data);
            result = Receive(clientSocket, 5000 * 2); //5*2 seconds timeout.
            Console.WriteLine("Receive:" + result);
            DestroySocket(clientSocket);
            return result;
        }
        /// <summary>
        /// 接收数据
        /// </summary>
        /// <param name="socket"></param>
        /// <param name="timeout"></param>
        /// <returns></returns>
        private static string Receive(Socket socket, int timeout)
        {
            string result = string.Empty;
            socket.ReceiveTimeout = timeout;
            List<byte> data = new List<byte>();
            byte[] buffer = new byte[1024];
            int length = 0;
            try
            {
                while ((length = socket.Receive(buffer)) > 0)
                {
                    for (int j = 0; j < length; j++)
                    {
                        data.Add(buffer[j]);
                    }
                    if (length < buffer.Length)
                    {
                        break;
                    }
                }
            }
            catch { }
            if (data.Count > 0)
            {
                result = encode.GetString(data.ToArray(), 0, data.Count);
            }
            return result;
        }
        /// <summary>
        /// 销毁Socket对象
        /// </summary>
        /// <param name="socket"></param>
        private static void DestroySocket(Socket socket)
        {
            if (socket.Connected)
            {
                socket.Shutdown(SocketShutdown.Both);
            }
            socket.Close();
        }
    }

unity3D中使用Socket进行数据通信(三)

今天跟大家继续学习下socket,由于最近有个招标参数需要给之前的一款产品做教师端以及后台数据库部分,忙了将近两个礼拜,今天刚发布了,就继续我们的socket通信部分。          之前服务端一...
  • lj34207310
  • lj34207310
  • 2016年03月11日 18:23
  • 10269

unity3D中使用Socket进行数据通信(一)

由于公司今年着重提高产品深度,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network可以搞定,后台部分前段时间主要研究了下Sqlite。由于sqli...
  • lj34207310
  • lj34207310
  • 2016年02月04日 11:29
  • 7794

设计一个简单的socket通信协议

为什么要设计一个协议呢?因为TCP协议是面向字节流的协议,面向字节流的协议是无边界的,也就是说一次发送操作并不一定就仅仅产生一个数据包,而有可能是多个,在接收端不一定一次接收就能完成所有数据的收操作。...
  • oceanperfect
  • oceanperfect
  • 2016年04月05日 09:42
  • 2635

unity3D中使用Socket进行数据通信

这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:端口。而socket传输数据的方式就是端口与端口之间以流(stream...
  • BBZZ2
  • BBZZ2
  • 2016年11月17日 19:32
  • 329

在Android系统使用socket在Java层和native之间数据通信

Android是基于linux的系统,系统底层机制基本上是相同的,因为分本地代码和java代码,并且是java代码通过jni调用本地代码执行。 因为UDP报文发送是有局限的,局限就是当发送方...
  • kieven2008
  • kieven2008
  • 2011年09月29日 16:03
  • 4464

unity3D中使用Socket进行数据通信(三)

今天跟大家继续学习下socket,由于最近有个招标参数需要给之前的一款产品做教师端以及后台数据库部分,忙了将近两个礼拜,今天刚发布了,就继续我们的socket通信部分。          之前服务端一...
  • lj34207310
  • lj34207310
  • 2016年03月11日 18:23
  • 10269

unity3D中使用Socket进行数据通信(一)

由于公司今年着重提高产品深度,通过对竞争产品的分析,发现我们的缺陷在于多人在线与后台管理部分,多人在线使用unity自带的Network可以搞定,后台部分前段时间主要研究了下Sqlite。由于sqli...
  • lj34207310
  • lj34207310
  • 2016年02月04日 11:29
  • 7794

unity3D中使用Socket进行数据通信(二)

上一篇博客主要介绍了使用socket搭建服务端和客户端程序,这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:端口。而s...
  • lj34207310
  • lj34207310
  • 2016年02月17日 21:11
  • 4590

在Android系统使用socket在Java层和native之间数据通信

http://blog.sina.com.cn/s/blog_82f2fc280101395m.html   在Android系统中,java代码和本地代码(c/c++)直接的通信一般是使用jni...
  • sunjianjun1981
  • sunjianjun1981
  • 2013年08月19日 15:39
  • 735

unity3D中使用Socket进行数据通信

这一篇来说说socket的数据传输,我们使用socket的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:端口。而socket传输数据的方式就是端口与端口之间以流(stream...
  • shanshui21
  • shanshui21
  • 2016年02月17日 21:21
  • 2820
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket 数据通信
举报原因:
原因补充:

(最多只允许输入30个字)