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的目的是解决点对点之间的数据传输,之前提到了socket中一个重要的概念:端口。而socket传输数据的方式就是端口与端口之间以流(stream...

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

Android是基于linux的系统,系统底层机制基本上是相同的,因为分本地代码和java代码,并且是java代码通过jni调用本地代码执行。 因为UDP报文发送是有局限的,局限就是当发送方...

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

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

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

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

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

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

Angular 2 父子组件数据通信

如今的前端开发,都朝组件式开发模式靠拢,如果使用目前最流行的前端框架Angular和React开发应用,不可避免地需要开发组件,也就意味着我们需要考虑组件间的数据传递等问题,不过Angular 2已经...

《数据通信与网络》笔记--网络交换技术

网络中如果有多台设备,如何才能将他们连接起来实现1对1的通信呢,一种好的解决方法就是交换技术(switching)。 交换方式的分类如下: 其中报文交换已逐步淘汰,今天主要讲下电路交换和分组交换。...
  • TODD911
  • TODD911
  • 2013年06月10日 08:00
  • 2075

《数据通信与网络》笔记--分段

为什么要分段 一个数据报可以通过几个不同的网络进行传输。每一个路由将它接收到的帧拆封成IPv4数据报,对它进行处理,然后将它封装成另一个帧。接收到的帧格式和长度取决于此帧刚刚经过的物理网络所使用的协...
  • TODD911
  • TODD911
  • 2013年07月27日 14:12
  • 1231

上海斐讯数据通信技术有限公司

上海斐讯数据通信技术有限公司(以下简称"PHICOMM斐讯")成立于2008年,短短五年时间,在市场上初显峥嵘,2012年公司销售额突破30亿元,2013年有望达到60亿元。作为一家以研发为导向的网络...
  • xyqxdd
  • xyqxdd
  • 2013年10月08日 12:48
  • 1696

数据通信与网络一(预习资料与个人总结大全)

本人电子信息专业出身,学习专业课程三年,但是对于网络和协议部分的了解却不够。现在,公司招聘、互联网发展以及IT专业素养甚至商务决策都对从事技术研究人员的水平有更高的要求,所以想利用大四下一段时间来查补...
  • wqthaha
  • wqthaha
  • 2014年02月28日 12:51
  • 691
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Socket 数据通信
举报原因:
原因补充:

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