起步socket编程 C#

       用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中编译通过。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值