起步socket编程 C#

来源:互联网 发布:java class命名规范 编辑:程序博客网 时间:2024/04/29 02:36

       用C#来编写SOCKET程序,总的来说还是比较方便的,微软帮忙我们做了很多工作。SOCKET编程应用很多, 相关资料网上也很多,因为工作需要,前一段时间也用C#编写一个socket程序,在这里写一下也算一个记录。

       在服务器端创建一个Socket,使用Bind方法绑定所指定的接口使Socket与一个本地终结联,并通过Listen方法侦听该接口上的请求,当侦听到用户端的连接时,调用Accept完成连接的操作,创建新的Socket以处理传入的连接请求。

       使用完Socket后,记住使用Shutdown方法禁用Socket,并使用Close方法关闭Socket

       在C#中,微软提供了socket 类

       public class Socket : IDisposable
       {
              public Socket(AddressFamily addressFamily, SocketType socketType, ProtocolType protocolType);

               //......

       }

       但是编码的时候一般不直接使用socket类,因为有两个类封装得更好。 TcpListener 和 TcpClient 。

        首先是服务端,绑定一个端口号,开启服务。

        

using System;using System.Collections.Generic;using System.Text;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;namespace ConsoleSocketServer{    class Program    {        private static TcpListener tcpServer = null;        static void Main(string[] args)        {            IPAddress iPAddress = IPAddress.Any;            tcpServer = new TcpListener(iPAddress, 999);            //999是端口号,可以随便改 0-1024,主要不要和什么80,8080之类的常用端口号相冲突哦。            tcpServer.Start();            Console.WriteLine("监听已启动......");            byte[] msg = Encoding.UTF8.GetBytes("服务端数据");            byte[] bytes = new byte[256];            while (true)            {                TcpClient client = tcpServer.AcceptTcpClient();                int i = client.Client.Receive(bytes);                Console.WriteLine("接受:" + Encoding.UTF8.GetString(bytes));                client.Client.Send(msg);                                client.Close();                Thread.Sleep(1000);            }        }    }}

  

客户端将是通过TcpClient的Connect方法来连接到指定的服务器,并通过Send方法发送数据,Receive接收数据。具体代码如下:

using System;using System.Text;using System.Collections;using System.Net;using System.Net.Sockets;using System.IO;using System.Threading;using System.Collections.Generic;namespace ConsoleSocketClient{    class Program    {        private static TcpClient client = new TcpClient();        static void Main(string[] args)        {            client.Connect("127.0.0.1", 999);//这里连得是本机999端口号            Console.WriteLine("连接成功......");            byte[] data = Encoding.UTF8.GetBytes("客户端数据");            Socket socket = client.Client;            socket.Send(data, data.Length, SocketFlags.None);            //Console.WriteLine("发送成功" + Encoding.UTF8.GetString(data));            socket.Receive(data, SocketFlags.None);            Console.WriteLine("接受数据" +  Encoding.UTF8.GetString(data));            Console.ReadKey();        }        }    }

         当然这个只是简单的说明socket如何通信,上面只是代码的简单演示,仅帮助大家学习、理解SOCKET编程,SOCKET实战还有很多路需要走。在实际编程过程中,SOCKET大多都与多线程有关系。没有多线程,可以说SOCKET编程就没有太多的意义。因为SOCKET涉及到太多了阻塞、运行和等待。如果以前没有做过SOCKET编程,很多时候会感觉程序莫名其妙的不动了,或者说是没有正常的响应了。其实这个时候往往就是程序处于阻塞状态。如果没有相应经历,总有点怪怪的感觉。解决办法就是采用多线程的方式。具体怎么弄,后面的文章再来写写。

上述代码在.net 4.0中编译通过。


1 0
原创粉丝点击